【发布时间】:2016-11-09 23:44:16
【问题描述】:
我在 Python 中创建了一个简单的递归阶乘函数。目前,我的计算机最多可以计算大约 10000 的阶乘。对于高于此的值,python.exe 将停止工作。
所以,我的问题是:如果我想处理更大的阶乘,有什么方法可以做到这一点(通过使用多核等)?或者它只是 Python 的限制?我已经检查过使用 GPU 处理 Python 脚本,但是对于我的想法来说,这个方法似乎很复杂 + 令人费解。
我已将递归限制设置为 100000,所以这不应该是问题。
这是我的代码:
import sys, time
sys.setrecursionlimit(100000)
def f(n):
if n==0:
return 1
else:
return n*f1(n-1)
感谢您的帮助
【问题讨论】:
-
我已将递归限制设置为 10000000,所以这不应该是问题。除了所有那些递归调用帧都占用内存。 Python 不优化递归调用。
-
你为什么要这样做?如果您当前使用多个内核使用整个内存不会改变任何内容
-
不,多核无济于事,因为 Python 解释器有一个与多核处理相当不兼容的全局解释器锁。找一个更好的算法代替(最好没有递归)。
-
那么 python.exe 会因为我的内存过载而停止工作吗?为什么会这样?
标签: python recursion optimization