题目描述
力扣_509. 斐波那契数
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
1 2
| F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1
|
给你 n ,请计算 F(n) 。
1 2 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
|
题目解析
常用递归解法
1 2 3 4 5 6 7
| func fib(n int) int { if n <= 1 { return n } return fib(n-1) + fib(n-2) }
|
数组解法
1 2 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] }
|
动态规划解法
1 2 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 }
|