我只是用int数组练习二进制搜索,并且无法弄清楚为什么我的逻辑关闭了。我已经跟踪了我的代码,这些都是我的意思。但是代码编译得很好;我错过了一些逻辑。我可以让额外的一双眼睛跟踪我的小段吗?
我认为我不需要返回0;但我不能让我的代码编译而没有在我的其他地方之外返回。
public static void main (String[] args)
{
int[] data = new int[]{5,10,15,20,25,30,35,40,45,50,55,60};
int first = 0;
int last = data.length;
int target = 55;
System.out.print(BinarySearch(data,first,last,target));
}
public static int BinarySearch(int[] data, int first, int last,int target)
{
if(first > last)
return -1;
else{
int middle = (first+last)/2;
if(target == data[middle])
return data[middle];
else if(target < data[middle])
BinarySearch(data,first,middle-1,target);
else
BinarySearch(data,middle+1,last,target);
}
return 0;
}
答案 0 :(得分:0)
您忽略了递归调用的结果。
返回递归调用的结果。
return BinarySearch(data,first,middle-1,target);
和
return BinarySearch(data,middle+1,last,target);
然后你可以删除最后的return 0;
;它现在是无法访问的代码。
此外,如果BinarySearch
方法返回找到target
的位置的索引,则会更有用。 return middle;
代替return data[middle]
。
要在搜索过高的ArrayIndexOutOfBoundsException
时避免target
,请将data.length - 1
分配给last
,而不是data.length
。最初的first
和last
必须是最小可能索引和最大可能索引。