簡體   English   中英

遞歸調用不返回?

[英]Recursive call doesn't return?

我在程序中實現了二進制搜索,但是由於某種原因,它完全忽略了我的一個return語句。 有問題的return語句如下: return array[mid];

當我使用Eclipse的調試器時,可以看到它輸入if語句,運行return,然后跳到以下兩行: binarySearch(array, key, low, mid - 1); return null;

關於為什么可能會發生的任何想法?

public Entry<K, V> binarySearch(Entry<K,V>[] array, K key, int low, int high) {
    if(low >= high) {
        Entry<K,V> notFound = new EntryNode<K,V>(null, null);
        return notFound;
    } else {
        int mid = (low + high) / 2;
        if(key.equals(array[mid].getKey()))
            return array[mid];
        else if(comparator.compare(key, array[mid].getKey()) < 0)
            binarySearch(array, key, low, mid - 1);
        else
            binarySearch(array, key, mid + 1, high);
    }   //End else statement
    return null;
}   //End binarySearch method

您都需要在兩個地方都return binarySearch(..) ,否則它將失敗並返回null。

您應該能夠刪除return null語句,而編譯器不會告訴您該函數並不總是返回值。

這是因為您忘記了返回內部binarySearch調用的結果。 因此,你有

binarySearch
    binarySearch
        binarySearch
            return array[mid]
        return null
    return null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM