昨晚执行一个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)
执行结果:
成功!