Если мой рекурсивный метод возвращает true, почему он входит в рекурсивный вызов? - PullRequest
0 голосов
/ 26 октября 2019

я работаю с многомерными массивами. я написал метод, который использует бинарный поиск, чтобы увидеть, есть ли какой-то int в одном под-массивахя отладил бинарный поиск, он работает нормально. я отладил метод, который вызывает двоичный поиск. я видел, что это вошло в устав. вернул истину. но он снова входит в рекурсивный вызов.

мой код:

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);
}

1 Ответ

1 голос
/ 26 октября 2019

Может быть, вы не используете возвращаемое значение? например, в этой части:

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 работает только на уровне одновременно.

...