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

这篇博客介绍了斐波那契数列的递归和动态规划解决方案。递归解法中,通过递归函数计算斐波那契数,而动态规划方法则使用一个数组dp来存储中间结果,避免重复计算。此外,还提到了如何使用自顶向下的方法优化递归解法,减少空间复杂度。文章提供了多种编程语言的实现示例,并链接到相关资源进行深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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得到第一步
在这里插入图片描述
java版本
在这里插入图片描述
在这里插入图片描述

进阶:我们不需要去维护一个dp的数组,我们只需要维护3个变量即可
在这里插入图片描述

自顶向下(从前向后)

在这里插入图片描述

在这里插入图片描述
递归,记得画出递归树,来分析时间复杂度

递归的三个条件:
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 );
    }
}

在这里插入图片描述

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;
}


在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述
+递归

在这里插入图片描述
在这里插入图片描述

和斐波那契像
用sout把每次结果输出
在这里插入图片描述

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

参考链接:https://blog.youkuaiyun.com/qq_42259469/article/details/84754391

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值