斐波那契数

#递归 #动态规划

题目描述

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 01 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n ,请计算 F(n)

示例 1:

输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

提示:

  • 0 <= n <= 30

思路

  • 状态转移方程:f(n)=f(n-1)+f(n-2),n>1 || f(n)=n, 0<=n<=1

dp

func fib(n int) int {

    if n==0 || n==1{
        return n
    }
    
    dp:=make([]int,n+1)
    dp[1]=1
    dp[0]=0
    for i:=2;i<=n;i++{
        dp[i]=dp[i-1]+dp[i-2]
    }
    return dp[n]

}

空间复杂度优化

  • 两个dp空间足够用了,没必要make([]int,n+1)

func fib(n int) int {

    if n==0 || n==1{
        return n
    }
    dp,dp1,dp2:=0,1,0

    for i:=2;i<=n;i++{
        dp=dp1+dp2
        dp2=dp1
        dp1=dp
    }
    return dp

}

Last updated