# 509. 斐波那契数
# 题目
斐波那契数,通常用 F(n)
表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
给定 N,计算 F(N)。
1
2
3
2
3
# 题解
# 递归
/**
* @param {number} N
* @return {number}
*/
var fib = function(N) {
if (N < 2) return N;
return fib(N - 1) + fib(N - 2);
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
尾递归优化:
var fib = function(N, a = 0, b = 1) {
return N === 0 ? a : fib(N - 1, b, a + b);
};
1
2
3
2
3
# 迭代
/**
* @param {number} N
* @return {number}
*/
var fib = (function() {
let cache = {};
return function(N) {
if (N === 0 || N === 1) return N;
if (N in cache) {
return cache[N];
}
cache[N] = fib(N - 1) + fib(N - 2);
return cache[N];
};
})();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
← 506. 相对名次 561. 数组拆分 I →