[英]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.