加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-17 01:22:32 所属栏目:Python 来源:网络整理
导读:昨晚执行一个Python递归程序,早上过来一看报错了: Process finished with exit code -1073741571 (0xC00000FD) 查看问题的根源在于递归导致的栈溢出,环境windows10、python3.6-64bit。 1. 测试最大递归代数,代码: pre class="has" import sys sys.setre

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

Process finished with exit code -1073741571 (0xC00000FD)

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

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

<pre class="has">
import sys
sys.setrecursionlimit(100000)

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

if name == 'main':
foo(1)

执行结果:

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

2. 按照网络教程,进行尾递归改造,代码:

<pre class="has">
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)

执行结果:

成功!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读