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) 时,您都将一次又一次地递归调用该函数。

调试代码会帮助您找到问题所在。如果您还不熟悉调试,我建议您学习调试。