Если вы хорошо разбираетесь в стеке, тогда вы поймете, как работает память в программе, и если вы поймете, как работает память в программе, вы поймете, как хранится функция в программе, и если вы поймете, как хранится функция в программе, вы поймете, как работает рекурсивная функция, и если вы поймете, как работает рекурсивная функция, вы поймете, как работает компилятор, и если вы поймете, как работает компилятор, ваш ум будет работать как компилятор, и вы очень легко отладите любую программу
Позвольте мне объяснить, как работает стек:
Сначала вы должны знать, как функция хранится в стеке:
Кучи хранят значения динамического выделения памяти. Стек хранить автоматическое размещение и удаление значений.
Давайте разберемся с примером:
def hello(x):
if x==1:
return "op"
else:
u=1
e=12
s=hello(x-1)
e+=1
print(s)
print(x)
u+=1
return e
hello(4)
Теперь разберитесь в частях этой программы:
Теперь давайте посмотрим, что такое стек и что такое части стека:
Выделение стека:
Помните одно: если какая-либо функция получит «return», независимо от того, загружены ли все его локальные переменные или что-то, что она немедленно вернет из стека, будет его стековым фреймом. Это означает, что когда любая рекурсивная функция получает базовое условие, и мы ставим return после базового условия, чтобы базовое условие не дожидалось загрузки локальных переменных, находящихся в «остальной» части программы, она немедленно возвращает текущий кадр из стека и теперь, если один кадр возвращать следующий кадр в записи активации. Смотрите это на практике:
Распределение блока:
Так что теперь, когда функция находит оператор возврата, она удаляет текущий кадр из стека.
при возврате из стека значение вернется в обратном порядке, в котором они размещены в стеке.
Это очень краткое описание, и если вы хотите узнать больше о стеке и двойной рекурсии, прочитайте два поста этого блога:
Подробнее о стеке шаг за шагом
Подробнее о двойной рекурсии шаг за шагом со стеком