我写了这段代码:
d=1
a=[d,d-1,d]
b=[]
def fctn(f):
h=2
if d>1:
b.append(f)
b.append(d-h)
h+=1
if d-h>0:
fctn(f)
elif d-h==0:
b.append(f)
b.append(0)
elif d==1:
b.append(f)
for i in range(len(b)-1):
b.append(b[i])
print(b)
带有:
d=2
如预期的那样,我得到:
[[2, 1, 2], 0, [2, 1, 2]]
与:
d=3
如预期的那样,我得到:
[[3, 2, 3], 1, [3, 2, 3], 0, [3, 2, 3], 1, [3, 2, 3]]
但是,d> 3 的,出现以下错误:
RecursionError: maximum recursion depth exceeded in comparison
因此,我尝试使用:
sys.setrecursionlimit()
并尝试运行以下代码(从IDLE和命令提示符处):
import sys
sys.setrecursionlimit(10**4)
d=1
a=[d,d-1,d]
b=[]
def fctn(f):
h=2
if d>1:
b.append(f)
b.append(d-h)
h+=1
if d-h>0:
fctn(f)
elif d-h==0:
b.append(f)
b.append(0)
elif d==1:
b.append(f)
for i in range(len(b)-1):
b.append(b[i])
print(b)
此时,不会出现错误,但是输出为空白。更准确地说,从IDLE运行,我得到:
=============================== RESTART: Shell ===============================
因此,在我看来,以前的RecursionError消失了,但是,代码仍然没有按我期望的那样执行,基本上没有任何输出。
这怎么了还将递归限制提高到10 ^ 9,我也一无所获。
关于如何解决问题有什么建议吗?
最佳答案
您陷入无限递归中,这就是为什么增加递归深度无济于事的原因。问题是您要分配
h=2
然后你
h+=1
现在h是3,d是4。
然后您到达了这一行:
if d-h>0:
fctn(f)
4-3> 0始终为真,因此当d> 4时,每次调用fctn(f)时,您将一次又一次递归地调用该函数。
调试代码将有助于您发现问题。如果您还不熟悉调试,建议您学习调试。
关于python-3.x - Python 3-使用sys.setrecursionlimit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61026446/