У меня одного криво работает рекурсия на python3?
Есть очень простой код, который запускает рекурсию и выводит текущую глубину рекурсии:
import sys
sys.setrecursionlimit(1000000000)
def rec(deep):
print('deep =', deep)
rec(deep + 1)
if __name__ == '__main__':
rec(0)
У меня он почему-то падает после глубины 3219, хотя в начале программы я установил огромный лимит рекурсии. Ошибка:
Process finished with exit code -1073741571 (0xC00000FD)
Это у меня одного так?
Я запускал на Python3.6
Ответы (2 шт):
Существует такое понятие как переполнение стека, оно не даёт вызывать рекурсию много раз. Для понимания нужно углубляться в особенности языка и операционных систем. Но лучше рекурсию заменить на цикл, это будет правильным решением
Очень жаль что python не оптимизирует хвостовую рекурсию (из коробки).
Нашел статью: https://towardsdatascience.com/python-stack-frames-and-tail-call-optimization-4d0ea55b0542
Там описывается решение с декоратором и с изменением байт-кода.
Сам не проверял.