斐波那契数列

116 阅读1分钟

斐波那契数列

题目

用 Javascript 计算第 n 个斐波那契数列的值,注意时间复杂度。

分析

斐波那契数列很好理解

  • f(0) = 0
  • f(1) = 1
  • f(n) = f(n - 1) + f(n - 2) 前两个值的和

扩展

青蛙跳台阶:一只青蛙,一次可以跳 1 个台阶,也可以跳 2 个台阶,问该青蛙跳上 n 级台阶,总共有多少种方式?

分析

  • f(1) = 1 跳 1 级台阶,只有一种方式
  • f(2) = 2 跳 2 级台阶,有两种方式
  • f(n) = f(n - 1) + fn(n - 2) 跳 n 级,可拆分为两个问题
    • 第一次跳,要么 1 级,要么 2 级,只有这两种
    • 第一次跳 1 级,剩下有 f(n - 1) 种方式
    • 第一次跳 2 级,剩下有 f(n - 2) 种方式

看公式,和斐波那契数列一样。


// /**
//  * 斐波那契数列(递归)
//  * @param n n
//  */
// function fibonacci(n) {
//     if (n <= 0) return 0
//     if (n === 1) return 1

//     return fibonacci(n - 1) + fibonacci(n - 2)
// }
/**
 * 斐波那契数列(循环)
 */
function fibonacci(n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;
  let n1 = 1; // 记录 n-1 的结果
  let n2 = 0; // 记录 n-2 的结果
  let res = 0;
  for (let i = 2; i < n; i++) {
    res = n1 + n2;
    // 记录中间结果
    n2 = n1;
    n1 = res;
  }
  return res;
}