[英]Why is return executed twice
在這種情況下,值匹配並且boolean的值設置為true,但是返回被調用兩次並且將值更新為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
時檢查案例,這意味着找不到該元素。
因為你的return 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;
}
您還可以在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;
}
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.