为什么return执行了两次
Why is return executed twice
在这种情况下,值确实匹配并且布尔值设置为 true,但是 return 被调用两次并将值更新为 false.Can 有人建议我在这里缺少什么吗? .
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:
return binSearch(...);
如果你不写它们,该方法将忽略递归的结果,只在最后 return false
。这样做之后,最后的 return
将是不必要的,应该删除。最后,您需要检查 low > high
时的大小写,这意味着找不到该元素。
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;
}
}
因为您的 return false;
覆盖了所有内容,除了在第一个 运行 上找到值并且没有调用递归调用的情况。每次递归调用请return。此外,您必须检查您的下限是否小于或等于上限。因此,您的代码可能如下所示:
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;
}
您也可以在binSearch
函数中尝试以下代码。唯一的变化是有一个布尔类型变量捕获递归调用中返回的值并最终返回这个变量。
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;
}
在这种情况下,值确实匹配并且布尔值设置为 true,但是 return 被调用两次并将值更新为 false.Can 有人建议我在这里缺少什么吗? .
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:
return binSearch(...);
如果你不写它们,该方法将忽略递归的结果,只在最后 return false
。这样做之后,最后的 return
将是不必要的,应该删除。最后,您需要检查 low > high
时的大小写,这意味着找不到该元素。
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;
}
}
因为您的 return false;
覆盖了所有内容,除了在第一个 运行 上找到值并且没有调用递归调用的情况。每次递归调用请return。此外,您必须检查您的下限是否小于或等于上限。因此,您的代码可能如下所示:
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;
}
您也可以在binSearch
函数中尝试以下代码。唯一的变化是有一个布尔类型变量捕获递归调用中返回的值并最终返回这个变量。
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;
}