繁体   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