Ответ
Рекурсия — это техника, при которой функция (или метод) вызывает саму себя, прямо или косвенно, для решения задачи путём её разбиения на более мелкие экземпляры той же задачи.
Обязательные компоненты рекурсивной функции:
- Базовый случай (условие остановки) — простейший случай, который решается напрямую, без дальнейших рекурсивных вызовов.
- Рекурсивный случай — вызов функции с изменёнными (обычно упрощёнными) аргументами, приближающими к базовому случаю.
Пример: вычисление факториала.
public int factorial(int n) {
// 1. Базовый случай
if (n <= 1) {
return 1;
}
// 2. Рекурсивный случай
return n * factorial(n - 1);
}
Плюсы:
- Элегантное и читаемое решение для задач с рекурсивной структурой (обход деревьев, графов, «разделяй и властвуй»).
Минусы и риски:
- Переполнение стека при глубокой рекурсии.
- Более высокие накладные расходы по памяти и времени по сравнению с итеративными решениями.
- Необходимость тщательно проектировать сходимость к базовому случаю.