题目描述
力扣_509. 斐波那契数  
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:  
| 12
 
 | F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1
 
 | 
给你 n ,请计算 F(n) 。  
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | 示例 1:输入:2
 输出:1
 解释:F(2) = F(1) + F(0) = 1 + 0 = 1
 
 示例 2:
 输入:3
 输出:2
 解释:F(3) = F(2) + F(1) = 1 + 1 = 2
 
 示例 3:
 输入:4
 输出:3
 解释:F(4) = F(3) + F(2) = 2 + 1 = 3
 
 
 提示:
 0 <= n <= 30
 
 | 
题目解析
常用递归解法
| 12
 3
 4
 5
 6
 7
 
 | func fib(n int) int {
 if n <= 1 {
 return n
 }
 return fib(n-1) + fib(n-2)
 }
 
 | 
数组解法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | func fib(n int) int {
 if n <= 1 {
 return n
 }
 
 nums := make([]int, 31)
 nums[0] = 0
 nums[1] = 1
 for i := 2; i <= n; i++ {
 nums[i] = nums[i - 2] + nums[i - 1]
 }
 
 return nums[n]
 }
 
 | 
动态规划解法
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | func fib(n int) int {
 if n < 2 {
 return n
 }
 p, q, r := 0, 0, 1
 for i := 2; i <= n; i++ {
 p = q
 q = r
 r = p + q
 }
 return r
 }
 
 |