0
点赞
收藏
分享

微信扫一扫

509. 斐波那契数(动态规划操作步骤)


目录

  • ​​509. 斐波那契数​​
  • ​​递归解法:​​
  • ​​动态规划解法:​​
  • ​​自顶向下(从前向后)​​
  • ​​剑指 Offer 10- I. 斐波那契数列​​
  • ​​动态规划dp​​

509. 斐波那契数

题目链接:​​509. 斐波那契数​​这个数列从第三项开始,每一项都等于前两项之和。

509. 斐波那契数(动态规划操作步骤)_斐波那契数列

递归解法:

class Solution {
//递归
// 1.int返回值,参数n
// 2.终止条件 N < 2
public int fib(int n) {
if(n < 2) return n;
return fib(n-1) + fib(n-2);
}
}

参考链接:
​​​ https://leetcode-cn.com/problems/fibonacci-number/solution/by-lovexh-xhrr/​​

动态规划解法:

五部曲:

  • 确认dp[i]含义
  • 递推公式
  • dp数组如何初始化
  • 遍历顺序:一般都是从前向后
  • 打印dp数组

参考链接:
​​​labuladong动态规划题解​​​​代码随想录动态规划题解​​

class Solution {
public int fib(int n) {
if(n<=1) return n;
int[] dp = new int[n+1];
dp[0] = 0;
dp[1] = 1;
for(int i=2;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
}

根据labuladong得到第一步

509. 斐波那契数(动态规划操作步骤)_斐波那契数列_02


java版本

509. 斐波那契数(动态规划操作步骤)_斐波那契数列_03


509. 斐波那契数(动态规划操作步骤)_java_04

进阶:我们不需要去维护一个dp的数组,我们只需要维护3个变量即可

509. 斐波那契数(动态规划操作步骤)_斐波那契数列_05

自顶向下(从前向后)

509. 斐波那契数(动态规划操作步骤)_java_06

509. 斐波那契数(动态规划操作步骤)_递归_07


递归,记得画出递归树,来分析时间复杂度

递归的三个条件:
1,大问题拆解为前2个数之和
2,子问题是全部一样
3,最小的子问题是n=1||2时,就返回1

//有输入输出版本

public class DiGui {
public static void main(String[] args){
//数列:1,1,2,3,5,8 ......
System.out.print( f(6) );//输出数列的第几位
}
public static int f(int n){
if( n == 1 || n == 2 )
return 1;
else
return f( n - 1 )+f( n - 2 );
}
}

509. 斐波那契数(动态规划操作步骤)_java_08

C实现

#include<iostream>
#include<string.h>
using namespace std;

int Fib(int n){
if(n==0)
return 0;
else if(n==1)
return 1;
else
return Fib(n-1)+Fib(n-2);
}

int main()
{
int n;
cout<<"请输入一个数"<<endl;
cin>>n;
cout<<"结果为:"<<endl;
cout<<Fib(n)<<endl;
return 0;
}

509. 斐波那契数(动态规划操作步骤)_动态规划_09

剑指 Offer 10- I. 斐波那契数列

题目链接:
​​​剑指 Offer 10- I. 斐波那契数列​​

509. 斐波那契数(动态规划操作步骤)_java_10

class Solution {
public int fib(int n) {
//压缩状态后
int a = 0, b = 1, sum;
for(int i = 0; i < n; i++){
sum = (a + b) % 1000000007;
a = b;
b = sum;
}
return a;
}
}

动态规划dp

经典问题
斐波那契数列
爬台阶

509. 斐波那契数(动态规划操作步骤)_算法_11


+递归

509. 斐波那契数(动态规划操作步骤)_斐波那契数列_12


509. 斐波那契数(动态规划操作步骤)_动态规划_13

和斐波那契像

用sout把每次结果输出

509. 斐波那契数(动态规划操作步骤)_java_14

​​https://www.bilibili.com/video/BV1wE411J766​​


举报

相关推荐

0 条评论