繁体   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