【问题标题】:Recursive call doesn't return?递归调用不返回?
【发布时间】:2012-03-15 06:14:05
【问题描述】:

我在我的程序中实现了二进制搜索,但由于某种原因,它完全忽略了我的一个返回语句。有问题的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

【问题讨论】:

  • 你能在一个简短但完整的控制台应用程序中演示这一点吗?

标签: java recursion binary-search


【解决方案1】:

两个地方都需要return binarySearch(..),否则会失败并返回null。

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

【讨论】:

    【解决方案2】:

    那是因为您忘记返回内部 binarySearch 调用的结果。这样你就有了

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 2017-01-12
      • 2015-10-22
      • 2018-10-11
      相关资源
      最近更新 更多