这可能是Python的IDLE编辑器的一个问题。 (我在OSX上运行Python 3.3.0,但2.7.3也出现了同样的问题)
我正在使用IDLE编写Python程序。我的问题是:调用一个递归函数,它调用自己太多次(1000次),并没有给我一个运行时错误,而是,它一直向我发送错误消息,直到我关闭程序。
它应该发送的错误是:“RuntimeError:超出最大递归深度。” 它发送一千次的错误并不仅仅是脚本在问题所在的位置:
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
答案 0 :(得分:1)
要阻止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 :(得分:0)
问题是你正在尝试使用float并且代码不能处理它。因此,1.5 -1变为0.5,这将导致第一次递归调用。然后,0.5 -1变为-0.5,这将导致进一步的递归调用。
为了处理这个问题,请使用: -
如果n <= 0:返回1