专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
程序员的那些事  ·  个人公积金交3998,单位交3998,加起来 ... ·  2 天前  
程序员的那些事  ·  北京大学出的第三份 DeepSeek ... ·  2 天前  
程序员的那些事  ·  清华出品:DeepSeek ... ·  3 天前  
码农翻身  ·  膜拜!上古程序员实在太厉害了! ·  昨天  
程序员小灰  ·  疯了!硅谷大佬预言:AI时代人类能活到150岁! ·  2 天前  
51好读  ›  专栏  ›  码农翻身

漫画:什么是动态规划?

码农翻身  · 公众号  · 程序员  · 2017-06-23 17:09

正文

来源: 微信公众号“梦见”

作者: 玻璃猫










————————————









题目:


有一座高度是 10 级台阶的楼梯,从下往上走,每跨一步只能向上 1 级或者 2 级台阶。要求用程序来求出一共有多少种走法。


比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。



比如,每次走2级台阶,一共走5步,这是另一种走法。我们可以简写成 2,2,2,2,2。



当然,除此之外,还有很多很多种走法。















————————————

















第一种情况:



第二种情况:














把思路画出来,就是这样子:














F(1) = 1;

F(2) = 2;

F(n) = F(n-1)+F(n-2)(n>=3)





















方法一:递归求解



由于代码比较简单,这里就不做过多解释了。



























如图所示,相同的颜色代表了方法被传入相同的参数。









方法二:备忘录算法



在以上代码中,集合map是一个备忘录。当每次需要计算F(N)的时候,会首先从map中寻找匹配元素。如果map中存在,就直接返回结果,如果map中不存在,就计算出结果,存入备忘录中。



























请到「今天看啥」查看全文