Java 递归调用不';你不回来了吗?
我在程序中实现了一个二进制搜索,但由于某种原因,它完全忽略了我的一个返回语句。所讨论的return语句如下:Java 递归调用不';你不回来了吗?,java,recursion,binary-search,Java,Recursion,Binary Search,我在程序中实现了一个二进制搜索,但由于某种原因,它完全忽略了我的一个返回语句。所讨论的return语句如下:returnarray[mid] 当我使用Eclipse的调试器时,我可以看到它进入if语句,运行return,然后跳到以下两行:binarySearch(array,key,low,mid-1),返回null 你知道为什么会这样吗 public Entry<K, V> binarySearch(Entry<K,V>[] array, K key, int low,
returnarray[mid]代码>
当我使用Eclipse的调试器时,我可以看到它进入if语句,运行return,然后跳到以下两行:binarySearch(array,key,low,mid-1)
,返回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
public Entry二进制搜索(Entry[]数组,K键,int-low,int-high){
如果(低>=高){
Entry notFound=newentrynode(null,null);
返回未找到;
}否则{
int mid=(低+高)/2;
if(key.equals(数组[mid].getKey())
返回数组[mid];
else if(comparator.compare(key,数组[mid].getKey())<0)
二进制搜索(数组、键、低、中1);
其他的
二进制搜索(数组、键、中+1、高);
}//End else语句
返回null;
}//结束二进制搜索方法
您需要在这两个位置返回binarySearch(..)
,否则它将失败并返回null
您应该能够删除return null
语句,而无需编译器告诉您函数并不总是返回值。这是因为您忘记返回内部binarySearch调用的结果。你就这样
binarySearch
binarySearch
binarySearch
return array[mid]
return null
return null
你能在一个简短但完整的控制台应用程序中演示这一点吗?