Вот смотри, видишь эти функции?
def fact1(n1):
if n1 > 1:
return n1 * fact2(n1 - 1)
else:
return 1
def fact2(n2):
if n2 > 1:
return n2 * fact3(n2 - 1)
else:
return 1
def fact3(n3):
if n3 > 1:
return n3 * fact4(n3 - 1)
else:
return 1
def fact4(n4):
if n4 > 1:
return n4 * fact5(n4 - 1)
else:
return 1
...
Чем они отличаются? Тут хорошо видно, что это разные функции. Устроены они одинаково, но при этом они все разные.
Вот при рекурсии происходит то же самое. Каждый новый вызов функции самой себя создаёт как бы новую такую же функцию, в которой есть всё то же самое, но при этом оно всё хранит в себе совершенно другие собственные данные. Структура одинаковая, а данные каждый раз внутри функции оказываются новые абсолютно. И вот эти функции ещё и общаются между собой. Одна функция вызывает какую-то и передаёт в неё информацию. А та функция отрабатывает все свои действия и в конце возвращает какую-то новую информацию обратно.
Вот хоть сто вызовов будет вот таких, это всё будет в виде функций с номерами 1, 2, 3, … , 98, 99, 100. И в каждой функции будет что-то своё. Пока они все будут работать, они все одновременно будут находиться в памяти, каждая на своём индивидуальном месте.
tags: recursion