我打算使用递归而不是for循环来打印出一些数字(除了四处玩耍之外,没有任何原因),所以我来到了这个代码,当我实现它时,它可以完美地适用于I的所有值,直到980,它正确地实现了代码,但在实现结束后,它会给出
Traceback
(很多东西)
文件"C:\Python34\lib\idlelib\PyShell.py",第1342行,正在写入return self.shell.write(s,self.tags)
RuntimeError:调用Python对象时超过了最大递归深度
此外,对于i大于980的值,它不会打印所有值,它只打印前980个循环,然后崩溃,给出相同的消息。
我怀疑这与实现所需的空间和时间有关,与python的工作结构有关,而不是与代码错误有关,但我既不是python专家,也不是编程专家,所以我想了解为什么会发生这种情况?
def cout(i):
if i==0:
print(0)
else:
print(i)
i-=1
cout(i)
这不是@Some_programer_dude提到的堆栈溢出,而是避免堆栈溢出的安全措施。您可以使用sys.setrecursionlimit
更改递归限制,但这样做是危险的——标准限制有点保守,但Python堆栈框架可能相当大。
您应该在不递归的情况下重写算法。正如你可能知道的,每一个递归算法都可以转换成一个等价的迭代算法。