我已编写此代码:
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]]
with:
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将始终为true,因此,当d> 4时,每次调用fctn(f)时,您将一次又一次地递归调用该函数。
调试代码可以帮助您发现问题。如果您还不熟悉调试,建议您学习。