Путаница с простой промежуточной рекурсией

#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)