python-3.x - Python 3-使用sys.setrecursionlimit()

标签 python-3.x recursion error-handling tail-recursion sys

我写了这段代码:

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/

相关文章:

python - 向类添加动态函数; Python

python - Python Dict 中错误消息的优先级

Python如何使用扩展路径长度

python - 如何将 Python 中的所有 unicode 小写字符与正则表达式匹配?

python - 如何在不使用 * 运算符(或/运算符)的情况下递归地将两个正整数相乘? .您可以使用加法、减法和位移

multithreading - Prolog 查找所有路径实现

c++ - 模板中的无限递归

symfony - 如何在Symfony2中隐藏E_USER_NOTICE错误

PHP PDO 更新 - 需要参数和无效的参数号

python - 通过其属性之一的值返回列表元素