Appearance
509. 斐波那契数
原题链接:LeetCode 509. 斐波那契数
题目描述
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
n
示例 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`
难度: Easy
题解代码
javascript
/**
* @param {number} N
* @return {number}
*/
// 递推
const fib = N => {
let cache = []
for (let i = 0; i <= N; i++) {
if (i < 2) {
cache[i] = i
} else {
cache[i] = cache[i - 1] + cache[i - 2]
}
}
return cache[N]
}
const fib = N => {
if (N < 2) {
return N
} else {
return fib(N - 1) + fib(N - 2)
}
}
// 尾调用优化
const fib = N => {
const fibImpl = (a, b, n) => {
if (n === 0) {
return a
}
return fibImpl(b, a + b, n -1)
}
return fibImpl(0, 1, N)
}
const flatDeep = arr => Array.isArray(arr) ? arr.reduce((total, cur) => [...total, ...flatDeep(cur)]) : [arr]