объясните рекурсию на рабоче-крестьянском языке

имеем данный код

    public class Main {

    public static void main(String[] args) {

        up_and_down(1);
    }

    public static void up_and_down(int i) {
        System.out.println("уровень вверх " + i);
        if (i < 3)
            up_and_down(i + 1);


            System.out.println("уровень вниз " + i);

    }
}

и вывод

уровень вверх 1
уровень вверх 2
уровень вверх 3
уровень вниз 3
уровень вниз 2
уровень вниз 1

статьи читал, там эти факториалы, еще больше запутался.

помогите понять данное явление... я это понимаю как вложенный if, сначала прокрутились по внутреннему циклу, затем вышли во внешний. Но не могу понять почему идёт обратный отсчёт?????


Ответы (1 шт):

Автор решения: Павел Ериков

Вы вызываете функцию up_and_down и у вас сразу печатается 1, т.к. 1 < 3, то вы вызываете эту же функцию. И теперь функция, где i = 1 будет ждать пока вызов up_and_down(i + 1) выполнится.

В функции, где i = 2 происходит аналогичное, мы сначала печатаем 2 в консоль и т.к. 2 < 3, то вызываем функцию up_and_down(3). И теперь функция up_and_down(1) ждет, выполнение up_and_down(2), а она ожидает up_and_down(3).

На данный момент мы имеем в консоли 3 строчки уровень вверх 1 и до 3-х.

Т.к. 3 не меньше 3, мы на этот раз не вызываем рекурсивно еще одну функцию, а печатаем уровень вниз 3 в консоль. И на этом функция up_and_down(3) закончила свою работу и мы обратно переходим в up_and_down(2).

В ней мы печатаем уровень вниз 2 и функция завершает свою работу и теперь опять переходим в up_and_down(1) и печатаем в консоль уровень вниз 1. И выходим!

Попробуйте просто пройтись дебаггером по своему примеру.

Небольшой рисунок):

введите сюда описание изображения

→ Ссылка