Якщо ви дуже добре розумієте стек, то зрозумієте, як працює пам'ять у програмі, і якщо ви розумієте, як працює пам'ять у програмі, ви зрозумієте, як зберігається функція в програмі, і якщо ви розумієте, як зберігається функція в програмі, ви зрозумієте, як працює рекурсивна функція і якщо ви розумієте, як працює рекурсивна функція, ви зрозумієте, як працює компілятор, і якщо ви зрозумієте, як працює компілятор, ваш розум буде працювати як компілятор, і ви легко налагодите будь-яку програму
Дозвольте мені пояснити, як працює стек:
Спочатку ви повинні знати, як зберігати функції в стеці:
Купа зберігає значення динамічного розподілу пам'яті. Значення автоматичного розподілу та видалення зберігання стека.
Розберемося на прикладі:
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, вона видаляє поточний кадр із стека.
при поверненні зі стека значення повернеться у зворотному порядку, у якому вони були виділені в стеці.
Це дуже короткий опис, і якщо ви хочете дізнатися більше про стек та подвійну рекурсію, прочитайте два повідомлення цього блогу:
Детальніше про стек крок за кроком
Більше про подвійну рекурсію крок за кроком зі стеком