python - 如何找到解决这个大值递归问题的数学方法呢?

标签 python

带有递归函数的python代码。计算这个就是PC变慢了。那么有没有一种简单的方法可以找到这段python代码的答案呢?

def rec(n):
    if n<1:
      return 1
    return rec(n//4)+rec(n//2)
print(rec(12345678987654321))

最佳答案

您可以考虑扩展递归关系,或者您可以简单地使用 memoization :

def memoize(f):
    memo = {}
    def helper(x):
        if x not in memo:
            memo[x] = f(x)
        return memo[x]
    return helper

@memoize
def rec(n):
    if n<1:
      return 1
    return rec(n//4)+rec(n//2)

print(rec(12345678987654321))

上面的代码在我的电脑上需要大约 30 毫秒,包括启动 Python 解释器所花费的时间。

记忆化通过不为相同的 n 值多次计算 rec() 来加快速度(原始版本一遍又一遍地重复相同的计算,浪费了大量的 CPU 周期)。

关于python - 如何找到解决这个大值递归问题的数学方法呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56407898/

相关文章:

python - Tensorflow:InvalidArgumentError:您必须使用 dtype int32 为占位符张量 'yy' 提供一个值

python - yticklabels 仅在主要刻度 matplotlib

python - 如何解决python shopify api InvalidURL : nonnumeric port: Error

python - 如何计算 pandas dataframe 中 500 个最常见的单词

python - 如何解析 Python 中的自由文本时间间隔,从几年到几秒不等?

Python 类定义语法

python - Pandas groupby 具有滚动日期偏移的多列 - 如何?

python - 根据时间戳间隔创建 csv 文件的数据框

python - 处理响应编码的请求

python - 表格单元格内的文本未正确对齐