【问题标题】:Handling heavy Python scripts处理繁重的 Python 脚本
【发布时间】: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


【解决方案1】:

我认为主要问题是调用堆栈,如果您不对阶乘使用尾递归,堆栈将被填满。我认为该帖子对您有用。

What is tail recursion?

def f_loop(n):
    acum = 1 
    for i in range(2,n+1):
        acum*=i
    return acum

你可以使用 functools.reduce 来实现它。

【讨论】:

  • 据我所知,Python不支持尾递归。
  • 嗯好的,你可以将函数切换到正常循环
猜你喜欢
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多