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