作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想打印斐波那契数列中从 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/
我是一名优秀的程序员,十分优秀!