Основные тезисы
1. Функция может вызывать другие функции или даже саму себя. Ситуация, когда функция вызывает саму себя, известна как рекурсия, и функция, которая вызывает сама себя и содержит определенное условие завершения (т.е. базовый случай - условие, которое указывает функции не выполнять любые дальнейшие вызовы этой функции) называется рекурсивной функцией.
2. Вы можете использовать рекурсивные функции в Python, чтобы написать чистый, элегантный код и разделить его на более мелкие, организованные части. С другой стороны, Вам нужно быть очень осторожным, так как может быть легко допустить ошибку и создать функцию, которая никогда не завершается. Вы также должны помнить, что рекурсивные вызовы потребляют много памяти и поэтому иногда могут быть неэффективными.
При использовании рекурсии нужно учитывать все ее достоинства и недостатки.
Факториальная функция - классический пример того, как концепция рекурсии может быть реализована на практике:
# Recursive implementation of the factorial function.
def factorial(n):
if n == 1: # The base case (termination condition.)
return 1
else:
return n * factorial(n - 1)
print(factorial(4)) # 4 * 3 * 2 * 1 = 24
Упражнение 1
Что произойдет, когда Вы попытаетесь запустить следующий код и почему?
def factorial(n):
return n * factorial(n - 1)
print(factorial(4))
Упражнение 2
Какой вывод будет у следующего фрагмента?
def fun(a):
if a > 30:
return 3
else:
return a + fun(a + 3)
print(fun(25))