# 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

# 题解

# 递归

/**
 * @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

尾递归优化:

var fib = function(N, a = 0, b = 1) {
  return N === 0 ? a : fib(N - 1, b, a + b);
};
1
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