【问题标题】:Recursive Binary Search does not return intended value [closed]递归二分搜索不返回预期值[关闭]
【发布时间】:2018-11-09 07:09:14
【问题描述】:

我的递归 Java 二进制搜索算法不起作用

这是我的方法:

System.out.println("recursiveBinarySearch "+recursiveBinarySearch(x,0,x.length-1,10));


public static int recursiveBinarySearch(int[]array,int low,int high,int value){
    int mid;

    if(low<=high){
        mid=(low+high)/2;

        if(array[mid]<value){
            recursiveBinarySearch(array,mid+1,high,value);
        }else if(array[mid]>value){
            recursiveBinarySearch(array,low,mid-1,value);
        }else{
            return mid;
        }
    }
    return -1;
}

它似乎总是返回-1,这意味着该方法未能找到值。有人可以帮我解决这个问题并得到正确的结果吗?

【问题讨论】:

  • 你能描述什么不工作吗?
  • 我们需要查看x 变量值。如果数组没有排序,则在使用该方法之前使用Arrays.sort(x),否则绑定搜索的原理将不起作用。
  • 你试过调试了吗?
  • recursiveBinarySearch(..) -> return recursiveBinarySearch(...)
  • 输出是“recursiveBinarySearch -1”

标签: java recursion search binary-search


【解决方案1】:

你应该返回递归调用的结果:

public static int recursiveBinarySearch(int[]array,int low,int high,int value){
    int mid;
    if(low<=high){
        mid=(low+high)/2;
        if(array[mid]<value){
            return recursiveBinarySearch(array,mid+1,high,value);
        }else if(array[mid]>value){
            return recursiveBinarySearch(array,low,mid-1,value);
        }else{
            return mid;
        }
    }
    return -1;
}

当您忽略递归调用的返回值时,您总是返回-1(除非初始的mid 索引包含您要查找的值)。

【讨论】:

  • noobie 错误对不起!
  • 这不适用于奇数长度的数组
  • @JPadley 我不知道你为什么这么说。我刚刚尝试了奇数和偶数长度,它都有效。
  • 对不起,我不知道我在想什么。我的意思是,当您在第一个索引处搜索值时,它会返回 -1,因为 0 和 1 的中间值会向上取整
  • @JPadley 我刚刚尝试搜索第一个索引的值并得到 0。而(0+1)/2 是 0,而不是 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多