【Python】解决尾递归最大次数限制(报错代码)

昨晚执行一个Python递归程序,早上过来一看报错了:

Process finished with exit code -1073741571 (0xC00000FD)

查看问题的根源在于递归导致的栈溢出,环境windows10、python3.6-64bit。

1. 测试最大递归代数,代码:

import sys
sys.setrecursionlimit(100000)


def foo(n):
    print(n, end=",")
    n += 1
    foo(n)

if __name__ == '__main__':
    foo(1)

执行结果:

执行到1860或者3222左右报错,最大代数不稳定。

2. 按照网络教程谁说Python不能尾递归优化,进行尾递归改造,代码:

import sys
import types
sys.setrecursionlimit(100000)

def foo(n):
    print(n)
    if n==100000:
        yield 1
    else:
        n += 1
        yield foo(n)

def tramp(gen, arg):
    g = gen(arg)
    while isinstance(g, types.GeneratorType):
        g=g.__next__()
    return g

if __name__ == '__main__':
    tramp(foo, 0)

执行结果:

成功!

猜你喜欢

转载自blog.csdn.net/ztf312/article/details/81296772