使用递归java进行二进制搜索

时间:2018-01-30 02:28:27

标签: java arrays recursion

我正在尝试编写一种方法,我只能使用二进制搜索和递归找到所需数字的索引。这是我写的方法:

public static int binSearch_r (int[] data, int value, int from, int to)
    {
        if (from <= to)
        {
            int middle = (from+to)/2;
            if (data[middle] > value)
            {
                binSearch_r(data, value, from, middle - 1);
            }
            else if (data[middle] < value)
            {
                binSearch_r(data, value, middle+1, to);
            }
            else
            {
                return middle;
            }
        }
        return -1;
    }

数据是输入的原始数组,value是我要查找的数字,from是数组的最左侧索引,是数组的最右侧索引。

我测试此方法的数组只是{1,2,3,4,5,6,7,8,9,10,11}。但是,当我将值设置为9,初始“从”到0并且初始“到”到array.length-1时,我接收-1而不是所需的索引。对于我为值设置的任何数字都会发生这种情况。我做错了什么?

2 个答案:

答案 0 :(得分:3)

如果您不熟悉递归,this是一个很好的资源,可以在Java上下文中解释它。

在递归二进制搜索中,如果找不到正确的索引,递归方法将减少搜索空间。通过缩小的搜索空间,该方法将调用自身以在该缩小的空间内找到索引。每次递归调用都需要返回一个值。

public static int binSearch_r (int[] data, int value, int from, int to) {
    if (from <= to) {
        int middle = (from+to)/2;

        if (data[middle] > value) {
            return binSearch_r(data, value, from, middle - 1);
        } else if (data[middle] < value) {
            return binSearch_r(data, value, middle+1, to);
        }
        return middle;            
    }
    return -1;
}

(从评论转移回答问题)

答案 1 :(得分:0)

[ 'rear neck and choke',
  'multiple fractures',
  'multiple hairline injuries',
  'leukemia' ]
相关问题