在这种情况下,该值确实匹配,并且布尔值设置为true,但是两次调用return并将值更新为false。有人可以建议我在这里缺少什么吗?
public class BinSearch {
public static void main(String[] args) {
BinSearch bin=new BinSearch();
int arr[]= {2,4,6,8,10,12,14,16};
boolean b=bin.binSearch(arr,0,arr.length-1,12);
System.out.println("Number found "+b);
}
public boolean binSearch(int arr[],int low,int high,int val)
{
int mid=(low+high)/2;
if(arr[mid]==val)
{
return true;
}
else if(arr[mid]>val)
{
binSearch(arr,mid+1,high,val);
}
else
{
binSearch(arr,low+1,mid,val);
}
return false;
}
}
最佳答案
调用递归时,您缺少两个返回值:
return binSearch(...);
如果不编写它们,则该方法将忽略递归的结果,仅在最后返回
false
。之后,最后一个return
将不再需要,应删除。最后,您需要检查low > high
的大小写,这意味着未找到该元素。