繁体   English   中英

Python,IDLE:太多的递归错误

[英]Python, IDLE: Too many recursive errors

据说这是Python的IDLE编辑器的问题。 (我在OSX上运行Python 3.3.0,但是在2.7.3中会发生相同的问题)

我正在使用IDLE编写Python程序。 我的问题是:调用一个自身调用过多次(1000次)的递归函数不会给我一个运行时错误,而是在关闭程序之前一直向我发送错误消息。

它应该发送的错误是:“ RuntimeError:超过最大递归深度。” 它发送一千次istead的错误只是指出问题所在的位置:

Traceback (most recent call last):
  File "<pyshell#112>", line 1, in <module>
    factorial(1.5)
  File "/Users/User/Documents/Python/Scripts/program1.py", line 187, in factorial
    recurse = factorial(n-1)
  File "/Users/User/Documents/Python/Scripts/program1.py", line 187, in factorial
    recurse = factorial(n-1)

等等

这与所有递归函数多次调用自身有关,但此处使用的特定函数是:

def factorial(n):
    if n == 0:
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse
        return result

要阻止python显示这数百个错误,可以使用try-except块:

def factorial(n):
    if n == 0:
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse
        return result
try:
    print (factorial(6000))
except RuntimeError as e:
    print (e)

输出:

#print factorial(1000)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

#print factorial(6000)
maximum recursion depth exceeded in comparison

在您的情况下,由于python对最大递归深度有限制,因此会发生此错误,它可以阻止C堆栈溢出。 但是您可以使用sys.setrecursionlimit更改它:

In [4]: import sys

In [5]: sys.getrecursionlimit()
Out[5]: 1000

问题是您尝试使用浮点数,而代码无法处理该浮点数。 因此,1.5 -1变为0.5,这将导致第一个递归调用。 然后,0.5 -1变为-0.5,这导致进一步的递归调用。

为了解决这个问题,请使用:-

如果n <= 0:返回1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM