递归调用不会返回?

kub*_*j21 0 java recursion binary-search

我在我的程序中实现了二进制搜索,但由于某种原因,它完全忽略了我的一个返回语句.有关的退货声明如下: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
Run Code Online (Sandbox Code Playgroud)

Eri*_*man 6

你需要return binarySearch(..)在两个地方,否则它将通过并返回null.

您应该能够删除该return null语句,而编译器不会告诉您该函数并不总是返回值.