dp 公式已给出,很好做了
这里的 dp[i] 代表斐波那契数列的第 i 项
func fib(n int) int {
if n <= 1 {
return n
}
dp := make([]int, n+1)
dp[0] = 0
dp[1] = 1
for i := 2; i <= n; i++ {
dp[i] = (dp[i-1] + dp[i-2])%1000000007
}
return dp[n]
}
根据 dp 公式发现,每次只用两个变量存离 n 最近的两项就行,可以简化得到
func fib(n int) int {
if n <= 1 {
return n
}
a, b := 0, 1
for i := 2; i <= n; i++ {
a, b = b, (a+b)%1000000007
}
return b
}