前端走楼梯

923 阅读1分钟

题目

一个长阶梯有n级,可以一次走1级,一次走2级,一共有多少种走法?

斐波拉契数列

// 斐波拉契数列
// 普通递归
// 会爆栈 -> 调用栈随着n的增加而线性增加
// 当n = 100,基本是浏览器就死了
function step(n) {
  if (n === 1) return 1;
  if (n === 2) return 2;
  return step(n - 1) + step(n - 2);
}

尾递归

// 尾递归
function fTail(n, a = 1, b = 2) {
  if (n === 1) return a;
  return fTail(n - 1, b, a + b);
}

直接改函数内部,循环执行

### 
// 直接改函数内部,循环执行
function fLoop(n, a = 1, b = 2) {
  while (n-- && n > 0) {
    [a, b] = [b, a + b];
  }
  return a;
}
// n = 3
// fTail(3, 1, 2) => fTail(2, 2, 3) => fTail(1, 3, 5)
console.log(fTail(3));
console.log(fLoop(3));