javascript - 斐波那契数列的实现未按预期运行

标签 javascript recursion

我想打印斐波那契数列中从 1 和 2 开始的前 5 个数字。我希望此代码在单击按钮时打印 1,2,3,5,8,但是不知怎的,它只打印最后一个数字,在本例中是 8。如果我之后多次单击该按钮,它总是打印 2。为什么会这样?

/*
 Fibonacci sequence is calculated by the formula An = An-1 + An-2
 @param prev An-2
 @param next An-1
 @param n the first n numbers to print
*/
var count = 0; // keeps track of which number we are on
function fibonacci(prev, next, n) {
    // Need to subtract 2 or else it will print the first 7 numbers instead of 5 
    return count++ < n - 2 ? fibonacci(Math.max(prev,next), prev+next, n) + "," : next;
}

document.querySelector('button').addEventListener('click', function() {
  console.log(fibonacci(1, 2, 5));
});
<button>Click me</button>

最佳答案

您仅将 console.log 与最后的结果一起使用。如果您想记录所有这些,您应该在递归函数中使用它。

第二次单击该按钮时,它不起作用,因为 count 是全局的。您可以在事件监听器内将其重置为 0,但最好避免全局变量。

function fibonacci(current, next, n) {
  if(n > 0) {
    console.log(current);
    fibonacci(next, current + next, n-1);
  }
}
document.querySelector('button').addEventListener('click', function() {
  fibonacci(1, 2, 5);
});
<button>Click me</button>

关于javascript - 斐波那契数列的实现未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769720/

相关文章:

recursion - 如何调用 shell 来创建一个新环境,以便在另一个 make 中运行一个 make?

javascript - 在 Mocha ESlint 中测试内部函数错误

javascript - 在复选框上启用或禁用 qtip

JavaScript:如何在它们的功能之外循环遍历这些项目?

javascript - 如何使用javascript用复选框替换html表中的真/假值

javascript - 堆栈和递归函数

ruby-on-rails - 堆栈级别太深,即使递归调用在函数末尾?

javascript - 如何递归调用这个函数?

javascript - 依赖复选框,你认为这个可以更简化吗?

java - 重复从字符串中删除子字符串