簡體   English   中英

為什么返回執行兩次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM