当前位置:   article > 正文

(DP)斐波那契数列的动态规划求解(Fibonacci Dynamic Programming)_求斐波那契数列的函数使用了动态规划法

求斐波那契数列的函数使用了动态规划法

对于斐波那契数列的求解,已经有成型的递归公式,因此最简单的求解方式就是利用递归求解,但是对于庞大的数据量,显然递归的时间耗费是巨大的。

因为每次计算一个F[n]都会计算F[n-1]和F[n-2],而F[n-1]和F[n-2]的下一个子问题有很多的相同项,这无疑就有了递归过程中的重复项。

代码中设置了f[n]数组,用于保存每一级的运算结果,即对于任意一个f[n]只需要计算一次即可,大大减少了重复运算。

因此算法的时间复杂度为O(n);

  1. //斐波那契数列的递归 动态规划解法
  2. /*F(n)=F(n-1)+F(n-2)
  3. while n>2 else F(n)=1 */
  4. #include<iostream>
  5. #include<vector>
  6. int n; //the goal of the scale
  7. std::vector<int> f;
  8. void getScale()
  9. {
  10. std::cout<<"please enter the scale of the question:";
  11. std::cin>>n;
  12. f.push_back(1); //begin with the index of i=0
  13. f.push_back(1);
  14. for(int i=2;i<=n;i++)
  15. f.push_back(0);
  16. }
  17. //define the function of recursion
  18. int Fibonacci(int n)
  19. {
  20. if (n<=1) return 1;
  21. if (f[n]!=0) return f[n];
  22. else return f[n]=(Fibonacci(n-1)+Fibonacci(n-2));
  23. }
  24. int main()
  25. {
  26. getScale();
  27. std::cout<<Fibonacci(n);
  28. }

如有错误和可以改进的地方,欢迎私信交流

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/573480
推荐阅读
  

闽ICP备14008679号