Базовый случай рекурсии
Базовый случай рекурсии — это условие, при выполнении которого алгоритм перестаёт вызывать сам себя и сразу возвращает результат. Он необходим, чтобы рекурсивный алгоритм завершался, а не выполнялся бесконечно.
Как распознать базовый случай
В программе базовый случай обычно проверяется в условной конструкции if. Если условие истинно, функция возвращает готовый ответ или выполняет действие без нового рекурсивного вызова. Во время каждого следующего вызова данные должны приближаться к базовому случаю; иначе глубина рекурсии может стать чрезмерной.
Для факториала базовым случаем является \(n=0\): \(0!=1\). При \(n>0\) функция вызывает себя для меньшего числа: \(n!=n\cdot(n-1)!\). Поэтому вычисление для \(3\) проходит так: \(3\cdot2\cdot1\cdot0!\), после чего возвращается \(1\) и вызовы завершаются.
1def factorial(n): 2 if n == 0: # базовый случай 3 return 1 4 return n * factorial(n - 1)
Базовый случай не вызывает функцию повторно. Строка return n * factorial(n - 1) — рекурсивный случай. Если проверка базового случая отсутствует или параметр не приближается к нему, алгоритм не остановится. Базовый случай также не обязан иметь значение \(0\): это может быть \(n=1\), пустая строка, пустой список или другое простейшее состояние.
Какое условие является базовым случаем в функции f(n): if n <= 1: return 1; return n * f(n - 1)?
Главное
- Базовый случай — условие, при котором рекурсивные вызовы прекращаются.
- Он возвращает известный результат без обращения функции к самой себе.
- Параметры в рекурсивном случае должны приближаться к базовому случаю.