我正在尝试编写一种方法,我只能使用二进制搜索和递归找到所需数字的索引。这是我写的方法:
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而不是所需的索引。对于我为值设置的任何数字都会发生这种情况。我做错了什么?
答案 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' ]