#java #recursion
#java #рекурсия
Вопрос:
Я пишу простую рекурсию вычисления средней точки:
public static void main(String[] args) {
int[] array = {0, 1, 2, 3, 4, 5, 6};
midPoint(0, array.length - 1, array);
}
private static void midPoint(int start, int end, int[] array) {
int mid = (start end) >>> 1;
if (start == end) return;
midPoint(start, mid, array);
midPoint(mid 1, end, array);
}
Этот код работает нормально, но если я изменю последние 2 строки на это:
midPoint(start, mid - 1, array);
midPoint(mid, end, array);
затем код переходит в бесконечную рекурсию и вызывает переполнение стека. После печати значений я понимаю, что позже я понимаю, что midPoint(1, -1, array)
это переходит в это условие, но концептуально я этого не понимаю, т.Е. При написании кода, как мне понять и избежать этого случая без необходимости отладки?
Ответ №1:
В конечном итоге метод будет вызываться 0
как start и 1
как end .
mid
тоже будет 0
, но условие (start == end)
будет ложным.
midPoint(0, 0-1, array);
будет вызван метод, и (start == end)
никогда не будет истинным, и метод будет вызывать себя бесконечное количество раз.
Я не понимаю, какова ваша кодовая точка, но, возможно, вам следует изменить ее на (start >= end)