java - 二分查找递归实现中的编译时错误

标签 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 值,但我仍然收到错误,为什么会发生这种情况。任何相关的想法将不胜感激。

谢谢

最佳答案

如果 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
    }

}

关于java - 二分查找递归实现中的编译时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739052/

相关文章:

java - 我该如何避免 NullPointerException?

java - 基本递归

java - 并发方法是加速长时间迭代的好主意吗?

c - 初始化结构指针数组的正确方法是什么?

Java:版本化数据结构?

java - 具有客户端证书身份验证的 WCF 服务的 Tomcat 应用程序

java - 有没有办法将值传递给构造函数中的特定项?

java - 如何使用 Synthetica 插件

java - 应该在递归函数中使用 StringBuilder 吗?

algorithm - 选择用于学习数据结构和算法的编程语言