【问题标题】:how to boost Combination recursive function's performance? [duplicate]如何提高组合递归函数的性能? [复制]
【发布时间】:2019-12-04 13:13:28
【问题描述】:

计算组合如下:

def C(n,r):
    if n==r:
        return 1
    elif r==1:
        return n
    else:
        return C(n-1,r)+C(n-1,r-1)

虽然参考上面的等式来计算 C(990, 33),python 会占用太多 时间。

如何提高其性能??

【问题讨论】:

标签: python recursion optimization combinations


【解决方案1】:

受到@user1558604 评论的启发;这要快得多:

cache = dict()

def C(n,r):
    if (n,r) in cache:
        return cache[(n,r)]
    elif n==r:
        cache[(n,r)] = 1
        return 1
    elif r==1:
        cache[(n,r)] = n
        return n
    else:
        cache[(n,r)] = C(n-1,r)+C(n-1,r-1)
        return C(n-1,r)+C(n-1,r-1)

输出:

>>> import timeit
>>> %timeit C(990, 33)
321 ns ± 24.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

【讨论】:

  • 这个方法能用尾递归优化吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2021-02-07
  • 2017-11-21
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多