【发布时间】:2020-04-14 02:15:52
【问题描述】:
我想对下面的程序进行递归,但由于输入的数字太大(19 位)。它在我的程序中引发错误 MemoryError:堆栈溢出或RecursionError:比较中超出了最大递归深度。我尝试使用
重置递归限制import sys
sys.setrecursionlimit(100000)
但这无济于事。你有什么解决方案来处理这么大的数字吗? 这是我的整个程序。
def recursion(n):
return 1 if n < 2 else n * recursion(n - 2)
string = str(recursion(1000000000000000000))
【问题讨论】:
-
有时递归不是一个有用的方法。
-
你对我在递归之外使用的其他方法有什么建议吗?
-
如果您遇到内存错误并且您的实现是正确的,这几乎肯定意味着您需要更改为非递归方法。 10^19 的递归深度在任何现有计算机上都是不可能的
-
即使不考虑递归限制问题,我怀疑你是否有足够的内存来保存
str(recursion(1000000000000000000))或计算recursion(1000000000000000000)的时间。使用对数,您可以验证所涉及的内存大到无法实现。您尝试计算的函数的增长速度比任何指数函数都快。
标签: python python-3.x recursion