427-动态规划算法-斐波那契数列

你的名字 2022-09-05 04:27 276阅读 0赞

动态规划算法求解斐波那契数列

在这里插入图片描述
状态:dp数组,存储已经求解的子问题的最优解

递归版本的动态规划算法

  1. //参数n表示斐波那契数列中数字的个数。
  2. //返回相应个数的斐波那契数列数字的值。
  3. int fabnacci(int n, int dp[])
  4. {
  5. if (dp[n] > 0)
  6. {
  7. //表示:子问题n之前被求解过了
  8. return dp[n];//直接返回解,提高算法的效率
  9. }
  10. if (n == 1 || n == 2)
  11. {
  12. dp[n] = 1;
  13. return 1;
  14. }
  15. else
  16. {
  17. dp[n] = fabnacci(n - 1, dp) + fabnacci(n - 2, dp);
  18. return dp[n] ;
  19. }
  20. }
  21. int main()
  22. {
  23. // 1 1 2 3 5
  24. int n = 10;
  25. int *dp = new int[n + 1]();
  26. int val = fabnacci(n, dp);
  27. cout << val << endl;
  28. return 0;
  29. }

非递归版本的动态规划算法

在这里插入图片描述

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int main()
  5. {
  6. const int n = 10;
  7. int dp[n + 1] = {
  8. 0};
  9. dp[1] = dp[2] = 1;
  10. for (int i = 3; i <= n; ++i)
  11. {
  12. dp[i] = dp[i - 1] + dp[i - 2];
  13. }
  14. cout << dp[n] << endl;
  15. return 0;
  16. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读