[英]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.