计算组合如下:
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会花费太多 时间。
如何提高其性能?
答案 0 :(得分:0)
受@ 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)