В книге "Грокаем алгоритмы" в главе 3, началось изучение Рекурсии. В подглаве "Стек вызовов с рекурсией" делается пример метода вычисления факториала с применением рекурсии
public static int fact(int x) {
if (x == 1) //базовый случай рекурсии ( т.е. остановка)
return 1;
else
return x * fact(x - 1);
}
Тут вроде всё понятно, так как дальше идёт иллюстрация того, что происходит в стэке.
Далее наткнулся на статью https://habr.com/ru/post/275813/ где идёт решение задач с помощью рекурсии. И застопорился, сразу же на первой)))
"Дано натуральное число n. Выведите все числа от 1 до n."
Подсмотрел в этой же статье решение:
public static String taskA (int x) {
// Базовый случай
if (x == 1) {
return "1";
}
// Шаг рекурсии / рекурсивное условие
return taskA(x - 1) + " " + x;
}
Тут у меня n = 3
И никак не могу понять одну вещь: то есть получился стэк из трёх методов вызова(всё как в иллюстрации "Грокаем Алгоритмы") при x = 1, возвращает строку с значением "1". Но, что происходит дальше? и почему на экран выводятся все числа от 1 до 3 (ну в случае с 1, всё понятно) Ведь получается, что блок стэка, где x = 1, выбрасывается и следующий идёт x = 2, то как же тогда получается цифра 2?, если return taskA(2 - 1) + " " + 2?
Спасибо!