Что такое стек вызовов
Стек вызовов — это то, как Python помнит, какие функции сейчас выполняются и куда вернуться после каждой.
Стопка тарелок
Представьте стопку тарелок: кладёте сверху и снимаете сверху. Когда одна функция вызывает другую, вызов кладётся на верх стопки; когда функция завершилась — снимается, и управление возвращается предыдущей. Это и есть стек вызовов.
Связь с traceback
Когда возникает ошибка, Python печатает traceback — по сути снимок стека вызовов: какая функция какую вызвала, вплоть до строки с ошибкой. Читая его снизу вверх, видно путь, как программа дошла до проблемы.
Переполнение при рекурсии
У стека есть предел глубины. Если рекурсия без базового случая уходит слишком глубоко, стек переполняется и возникает ошибка (RecursionError). Отсюда правило: у рекурсии всегда должен быть базовый случай.
Частые вопросы
Зачем мне знать про стек? Он объясняет traceback и ошибки рекурсии — понимая его, легче их читать.
Что значит RecursionError? Слишком глубокая рекурсия переполнила стек вызовов; проверьте базовый случай.
Начать игру бесплатно