我是编程新手并编写了这个代码用于递归二进制搜索,但输出错误 我尝试过多次调试,但不知道我哪里出错了。
public class Number {
public static void main (String[] args){
int []a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
int key = 7;
int mid,low,high;
low=0;
high=a.length-1;
int pos=binarySearch(a,key,low,high);
System.out.println(key +" is found at "+pos+" position");
}
public static int binarySearch(int[]a,int key,int low, int high) {
int mid=(low+high)/2;
if(key<a[mid]){
high=mid-1;
binarySearch(a,key,low,high);
}
else if(key >a[mid]){
low=mid+1;
binarySearch(a,key,low,high);
}
else if(low>high){
return -1;
}
return mid;
}
}
答案 0 :(得分:2)
在递归调用期间,调用者的执行被中断,并且他的执行帧被压入堆栈。当被调用者完成执行时,从堆栈中检索调用者帧并继续执行。你分配了9到中期,你没有重新分配它返回中间。如果您尝试使用不同大小的数组,您将看到始终返回初始mid并且无缘无故地进行所有递归调用。调试一个System.out.println(“return”+ mid);在退货声明面前。
答案 1 :(得分:1)
//ignores found value
binarySearch(a,key,low,high);
应该是
//returns value
return binarySearch(a,key,low,high);
在“if”和“else if”条款中
答案 2 :(得分:0)
您应首先检查mid是否等于键。如果是,请逃避。