python - 如何提高组合递归函数的性能?
问题描述
计算组合如下:
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 会花费太多时间。
如何提高其性能?
解决方案
受到@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)
推荐阅读
- reactjs - 带有 ReferenceField 问题的 React-Admin 条件样式
- javascript - 一种快速填充轮廓的方法,能够导出为类似多边形的格式
- python - 如何强制numpy数组中的数据类型远离科学概念
- r - 如何将selectInput添加到R Shiny中数据表的每一行然后读取它
- c# - 从 URL 下载 XML 的奇怪问题
- c# - C# 组合框,在焦点丢失事件上将文本值分配给变量?
- java - Testng 报告头等舱 2 个班级的所有测试
- java - 无法理解 ObjectMapper writeValueAsString(Object value) 方法的行为
- django - 无论如何要在我的博客中上传多张图片吗?
- javascript - 为不同的函数更新变量 React