Python 3-使用sys.setrecursionlimit()

问题描述 投票:1回答:1

我已编写此代码:

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,我也一无所获。关于如何解决问题有什么建议吗?

python-3.x recursion error-handling tail-recursion sys
1个回答
0
投票

您陷于无限递归中,这就是为什么增加递归深度将无济于事。问题是您要分配

h=2

那么你

h+=1

现在h是3,d是4。

然后您到达该行:

if d-h>0:
    fctn(f)

4-3> 0将始终为true,因此,当d> 4时,每次调用fctn(f)时,您将一次又一次地递归调用该函数。

调试代码可以帮助您发现问题。如果您还不熟悉调试,建议您学习。

© www.soinside.com 2019 - 2024. All rights reserved.