簡體   English   中英

如果我的遞歸方法返回 true,為什么它會進入遞歸調用?

[英]If my recursive method return true, why it enters a recursive call?

我正在使用多暗色 arrays。 我寫了一種方法,使用二分搜索來查看某個 int 是否在一個子 arrays 中。 我調試了 binarySearch 它工作正常。 我調試了調用 binarySearch 的方法。 我看到它進入了 if 語句。 返回真。 但它再次進入遞歸調用。

我的代碼:

int[][] mainArr = {
            {1,1,1,1},
            {1,2,3,4},
            {4,5,6,6},
            {6,7,8,9}
    };
    System.out.println(exerciseSix(mainArr, 5, 0));

}

public static boolean exerciseSix(int[][] arr, int x, int position){
    int binAns = -1;
    if(position == arr.length){
        return false;
    }
    if(x == arr[position][arr[position].length - 1]){
        return true;
    }

    if(x < arr[position][arr[position].length - 1]){
        binAns = binarySearch(arr[position], 0, arr[position].length, x);
    }
    if(x == binAns){
        return true;
    }
    if(x > arr[position][arr[position].length - 1]){
        exerciseSix(arr, x, ++position);
    }
    return false;
}

static int binarySearch(int[] arr, int l, int r, int x){//l is the left most index
    if(r < l)
        return -1;
    int m = l+(r-l)/2;
    if(arr[m] == x)
        return arr[m];
    if(arr[m] < x)
        return binarySearch(arr, m+1, r, x);
    return binarySearch(arr, l, m-1, x);
}

可能是您沒有使用返回的值嗎? 例如在這部分:

if(x > arr[position][arr[position].length - 1]){
    exerciseSix(arr, x, ++position);
}
return false;

無論exerciseSix(arr, x, ++position)返回什么,它都會被扔掉,並到達下一行,即return false 早些時候在類似的情況下,您將結果分配給一個變量,但在這里您完全丟棄它,使其成為死代碼。 如果你想返回它,你需要寫return exerciseSix(arr, x, ++position); 因為return一次只能在水平上起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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