【发布时间】:2018-07-08 20:09:51
【问题描述】:
我正在尝试编写一种方法,我可以仅使用二进制搜索和递归来找到所需数字的索引。这是我写的方法:
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;
}
data 是输入的原始数组,value 是我要查找的数字,from 是数组的最左边的索引,to 是数组的最右边的索引。
我测试这个方法的数组只是 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}。但是,当我将值设置为 9、初始“从”设置为 0、初始“至”设置为 array.length-1 时,我收到 -1 而不是所需的索引。这发生在我为值设置的任何数字上。我做错了什么?
【问题讨论】:
-
您需要在
binSearch_r递归调用中添加一个返回。即return binSearch_r(data, value, from, middle - 1); -
解决了问题,非常感谢!