Java 为什么要执行两次返回
在这种情况下,值确实匹配,布尔值设置为true,但是调用了两次return并将值更新为false。有人能告诉我这里缺少什么吗Java 为什么要执行两次返回,java,recursion,binary-search,Java,Recursion,Binary Search,在这种情况下,值确实匹配,布尔值设置为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(ar
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
。执行此操作后,最后一个返回值将不必要,应该删除。最后,您需要在low>high
时检查大小写,这意味着找不到元素。公共类bin搜索{
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,16);
System.out.println("Number found "+b);
}
public boolean binSearch(int arr[],int low,int high,int val)
{
int mid=(low+high)/2;
//boolean b = false;
while(low<=high)
{
if(arr[mid]==val)
{
return true;
}
else if(val>arr[mid])
{
return binSearch(arr,mid+1,high,val);
}
else
{
return binSearch(arr,low+1,mid,val);
}
}
return false;
}
}
公共静态void main(字符串[]args){
BinSearch bin=新的BinSearch();
int arr[]={2,4,6,8,10,12,14,16};
布尔b=二进制二进制搜索(arr,0,arr.length-1,16);
系统输出打印项次(“找到的编号”+b);
}
公共布尔binSearch(int-arr[],int-low,int-high,int-val)
{
int mid=(低+高)/2;
//布尔b=假;
while(低arr[mid])
{
返回b搜索(arr、mid+1、high、val);
}
其他的
{
返回b搜索(arr、低+1、中、val);
}
}
返回false;
}
}
因为您的返回false代码>覆盖所有内容,但在第一次运行时发现该值且未调用递归调用的情况除外。请返回每个递归调用。此外,必须检查低边界是否小于或等于高边界。因此,您的代码可以如下所示:
public boolean binSearch(int arr[],int low,int high,int val)
{
if (low <= high) {
int mid=(low+high)/2;
if(arr[mid]==val) {
return true;
} else if(arr[mid]>val) {
return binSearch(arr,mid+1,high,val);
} else {
return binSearch(arr,low+1,mid,val);
}
}
return false;
}
public boolean-bin搜索(int-arr[],int-low,int-high,int-val)
{
如果(低值){
返回b搜索(arr、mid+1、high、val);
}否则{
返回b搜索(arr、低+1、中、val);
}
}
返回false;
}
您也可以在b搜索功能中尝试以下代码。唯一的改变是有一个布尔型变量,它捕获递归调用中返回的值,并最终返回这个变量
public boolean binSearch(int arr[],int low,int high,int val) {
int mid=(low+high)/2;
boolean returnValue = false;
if(arr[mid]==val) {
return true;
} else if(arr[mid]>val) {
returnValue = binSearch(arr,mid+1,high,val);
} else {
returnValue = binSearch(arr,low+1,mid,val);
}
return returnValue;
}