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