Python 3 - 使用 sys.setrecursionlimit()
Python 3 - Use of sys.setrecursionlimit()
我写过这段代码:
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) 时,您都将一次又一次地递归调用该函数。
调试代码会帮助您找到问题所在。如果您还不熟悉调试,我建议您学习调试。
我写过这段代码:
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) 时,您都将一次又一次地递归调用该函数。
调试代码会帮助您找到问题所在。如果您还不熟悉调试,我建议您学习调试。