如何在JavaScript中使用递归实现斐波那契数

时间:2019-04-12 18:59:30

标签: javascript recursion functional-programming

我尝试在javascript中玩递归。我为斐波那契数列编写了一个函数。但是,仅当参数为0时有效

fib = (x)=>{
    if (x == 0 || x ==1) {
        return 1
    } else {
        return fib(x-1) + fib(x+1)
    }
}

它返回1表示1,但大于0的数字表示错误超出了最大调用堆栈大小

2 个答案:

答案 0 :(得分:2)

这不是斐波那契数列。这是斐波那契数列:

fib = (x) => {
  if (x == 0 || x == 1) {
    return 1;
  } else {
    return fib(x - 1) + fib(x - 2);
  }
}

for (let i = 0; i < 10; i++) {
  console.log(fib(i));
}

当然是最简单的形式。如果超过10,您将体验到计算机成指数级的计算成本。

答案 1 :(得分:2)

您需要倒数第二个迭代的值,而不需要前面的迭代。

也请在这里查看:Fibonacci number

const fib = x => {
    if (x === 0 || x === 1) {
        return 1;
    }
    return fib(x - 2) + fib(x - 1);
};

console.log(fib(7));