在二进制搜索递归实现中编译时间错误

时间:2016-09-28 05:56:04

标签: java recursion data-structures binary-search

我在二进制搜索递归实现中遇到一个编译错误

这是我的方法:

public static int binarySearch(int[] a, int start, int end, int x) {
    if (start > end) {
      return -1;
    }
    int mid = (start + end) / 2;
    if (a[mid] == x) {
        return mid;
    } else if (a[mid] > x) {
        binarySearch(a, start, mid - 1, x);
    } else {
        binarySearch(a, mid + 1, end, x);
    }
}

我给出了两个基本情况并返回两个int值,但我仍然得到错误,为什么会发生这种情况。任何相关的想法都会得到赞赏。

由于

2 个答案:

答案 0 :(得分:2)

如果start > enda[mid] == x都是false,您认为在第一次通话时会返回什么?

您还需要返回递归调用,以便找到的值(或-1)将通过递归堆栈帧传播回来:

public static int binarySearch(int[] a, int start, int end, int x) {
    if (start > end) {
        return -1;
    }
    int mid = (start + end) / 2;
    if (a[mid] == x) {
        return mid;
    } else if (a[mid] > x) {
        return binarySearch(a, start, mid - 1, x); // return here
    } else {
        return binarySearch(a, mid + 1, end, x);   // return here
    }

}

答案 1 :(得分:-1)

在您的语句binarySearch(a, start, mid - 1, x); AND binarySearch(a, mid + 1, end, x);中,您只是调用函数binarysearch。而不是这样,您需要返回这些递归调用的输出

因此,正确的方法是使用return binarySearch(a, start, mid - 1, x); AND return binarySearch(a, mid + 1, end, x);