Рекурсия
Рекурсия — это метод реализации функции, при котором функция вызывает сама себя, но с другими значениями параметров.
Факториал: рекурсивная реализация
Для вычисления факториала числа используется факт 0! = 1 и рекуррентное соотношение n! = n * (n - 1)!.
Факториал: нерекурсивная реализация
Для сравнения, та же функция через цикл:
В любой рекурсивной функции обязательно должно быть условие остановки (базовый случай), при котором новые рекурсивные вызовы не выполняются.
Вывод чисел от 1 до n без циклов
Вывод чисел от n до 1 без циклов
Если поменять местами последние две команды, получим обратный порядок:
Быстрое возведение в степень
Рассмотрим задачу возведения числа a в степень n.
Наивный способ использует n - 1 умножений, но есть более быстрый рекурсивный подход.
Используем формулы:
a^n = (a^(n / 2))^2, еслиnчетноa^n = a * a^(n - 1), еслиnнечетно
Рекурсивная функция:
int power(int a, int n) {
if (n == 0) {
return 1;
}
if (n % 2 == 0) {
int temp = power(a, n / 2);
return temp * temp;
} else {
return a * power(a, n - 1);
}
}
Задача «Ханойская башня»
Есть три стержня 1, 2, 3. На стержне 1 находится пирамида из n дисков.
Нужно перенести ее на стержень 3, используя стержень 2 как вспомогательный.
За один ход можно переносить только один диск, и нельзя класть больший диск на меньший.

Функция печатает последовательность ходов в формате:
a b c, где a — номер диска, b — откуда снимаем, c — куда кладем.
Идея рекурсии для переноса n дисков со стержня f на стержень t:
- перенести
n - 1дисков сfна промежуточныйv = 6 - f - t - перенести диск
nсfнаt - перенести
n - 1дисков сvнаt