【发布时间】:2016-10-20 20:10:31
【问题描述】:
遇到了一个愚蠢的错误,我只是没有看到它。我已经看了一段时间了,看不出我错过了什么。我正在递归地搜索一个数组以查找特定的目标编号,但是一旦我到达元素 [7],它就会开始返回 -1。感谢各位看官/女士们!
public static void main(String[] args)
{
int[] a = {1,25,2,6,4,3,23,30,32,14,11,8};
Arrays.sort(a);
int target = a[7];
int first = a[0];
int last = a.length;
for(int i=0;i<a.length;i++)
{
System.out.print(" "+a[i]);
}
System.out.println("\n"+binarySearch(target,first,last,a));
}
public static int binarySearch(int target,int first, int last, int[] a)
{
int result;
if(first>last)
return -1;
else
{
int mid = (first+last)/2;
if(target == mid)
result = mid;
else if(target<a[mid])
result = binarySearch(target,first,last-1,a);
else
result = binarySearch(target,mid+1,last,a);
}
return result;
}
【问题讨论】:
-
具体来说,当你计算mid的时候,你要计算的mid就是midindex。所以你不能使用像这样的值:
(first+last)/2。你需要索引。正确的?想想想想......你会到达那里!
标签: java if-statement for-loop recursion