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