当前位置:   article > 正文

动态规划——斐波那契_下面程序用动态规划法快速计算斐波那契数,在下划线处填上正确的表达式

下面程序用动态规划法快速计算斐波那契数,在下划线处填上正确的表达式

题目链接

509. 斐波那契数 - 力扣(LeetCode) (leetcode-cn.com)

这种题在学语言学习的时候都会了解的(谭浩强的C++、数据结构等等教材)

通俗递归解法

  1. int fib(int N) {
  2. if (N == 0 || N == 1) {
  3. return N;
  4. }
  5. return fib(N - 1) + fib(N - 2);
  6. }

上面这种做法时间复杂度很高,可能N>100时,时间就达到5秒以上了(指数级别2^n次方)

如果利用动态规划,先得递推公式,求出dp数组

空间:O(n) 

  1. int fib(int N) {
  2. if (N <= 1) return N;
  3. vector<int> dp(N + 1);
  4. dp[0] = 0;
  5. dp[1] = 1;
  6. for (int i = 2; i <= N; i++) {
  7. dp[i] = dp[i - 1] + dp[i - 2];
  8. }
  9. return dp[N];
  10. }

 空间:O(1)

  1. int fib(int N) {
  2. if (N <= 1) return N;
  3. int dp[2];
  4. dp[0] = 0;
  5. dp[1] = 1;
  6. for (int i = 2; i <= N; i++) {
  7. int sum = dp[0] + dp[1];
  8. dp[0] = dp[1];
  9. dp[1] = sum;
  10. }
  11. return dp[1];
  12. }

 

还有一道类似的题可以练手

1137. 第 N 个泰波那契数 - 力扣(LeetCode) (leetcode-cn.com) 

 

代码实现如下

  1. int tribonacci(int n) {
  2. int tmp[3]={0,1,1};
  3. for (int i = 3; i <= n; i++)
  4. tmp[i%3]=tmp[0]+tmp[1]+tmp[2];
  5. return tmp[n%3];
  6. }

 

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

闽ICP备14008679号