Почему Гвидо ван Россум отказался от оптимизации хвостовой рекурсии и как устроен лимит стека?

Гвидо возражал против устранения хвостовых вызовов прежде всего из-за потери понятных traceback и появления зависимости программ от этой оптимизации. Python не гарантирует хвостовую рекурсию без роста глубины.

Короткий ответ

Что ответить на собеседовании

Гвидо возражал против устранения хвостовых вызовов прежде всего из-за потери понятных traceback и появления зависимости программ от этой оптимизации. Python не гарантирует хвостовую рекурсию без роста глубины.

Подробный разбор

Ответ с пояснениями

Гвидо возражал против устранения хвостовых вызовов прежде всего из-за потери понятных traceback и появления зависимости программ от этой оптимизации. Python не гарантирует хвостовую рекурсию без роста глубины.

Динамическое связывание имён и обработка исключений также делают наивное превращение вызова в переход некорректным. В CPython превышение установленной глубины приводит к RecursionError; лимит смотрят через sys.getrecursionlimit(). Это не универсальный фиксированный размер C-стека: устройство кадров меняется между версиями. Бездумное повышение лимита может привести к чрезмерному расходу ресурсов. Для глубокой обработки дерева лучше явный стек, а для рекурсивно записанного цикла — обычный цикл. Tail-call-интерпретатор CPython 3.14 не означает устранения рекурсии пользовательских Python-функций.

Источник: neopythonic.blogspot.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее