斐波那契数列 递推 递归 备忘录 动态规划
生活随笔
收集整理的这篇文章主要介绍了
斐波那契数列 递推 递归 备忘录 动态规划
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
当n=0时,f(n) = 0
当n=1时,f(n) = 1
当n>1时,f(n) = f(n-1) + f(n-2)
递归算法:
[cpp] view plaincopy
备忘录方法:
[cpp] view plaincopy
由于计算的时候只需要前两个数即可,所以代码还可以继续优化。但是对于上述的备忘录方法貌似不能继续进行空间优化了(不知道对否,如果理解的不对请不吝赐教~)。
但是对于下面的方法(就称为遍历方法吧),还是可以继续优化的。 自底向上的动态规划
[cpp] view plaincopy
斐波那契数(动态规划)通过把所计算的值存储在递归过程的外部数组中,明确地避免重复计算。这一程序计算的时间与N成正比。int F(int i){if(knownF[i] != unknown)return knownF[i];if(i == 0) t = 0;if(i == 1) t = 1;if(i > 1) t = F(i - 1) + F(i - 2);return knownF[i] = t;}
自顶向下的动态规划
由于计算的时候只用了前两个数,所以没有必要使用数组。
[cpp] view plaincopy
总结:从代码中可以看出来,遍历方法实际上是一种自底向上的方法,而备忘录方法是一种自顶向下的方法,也许正由于这个原因造成了备忘录方法无法进行空间优化。(待证)
总结
以上是生活随笔为你收集整理的斐波那契数列 递推 递归 备忘录 动态规划的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: “斐波那契数列”的两种算法
- 下一篇: STL之七:STL各种容器的使用时机详解