我已经放在一起生成器来计算斐波纳契数字/序列。但是,它并没有像我期望的那样工作。我从python“转译”它,但我不知道它是什么在我的JavaScript代码,不符合我的逻辑python做的...任何人都可以给我一个提示呢?如何创建一个Javascript生成器来计算斐波那契数列?
下面的代码:
// Fibonacci generator
function* fibonacci() {
var a = 0;
var b = 1;
while (true) {
yield a;
a = b;
b = a + b;
}
}
// Instantiates the fibonacci generator
fib = fibonacci();
// gets first 10 numbers from the Fibonacci generator starting from 0
for (let i = 0; i < 10; i++) {
console.log(i + ' => ' + fib.next().value);
}
我觉得这是变量的作用域的问题。我刚刚得到这个这样做的工作:
// Fibonacci generator
function* fibonacci() {
var a = 0;
var b = 1;
while (true) {
var current = a;
a = b;
b = current + a;
yield current;
}
}
// Instantiates the fibonacci generator
var fib = fibonacci();
// gets first 10 numbers from the Fibonacci generator starting from 0
for (let i = 0; i < 10; i++) {
console.log(i + ' => ' + fib.next().value);
}
不过,我还是不明白,为什么我需要声明一个第三个变量(“电流”),我的内循环,以获得理想的结果。有任何想法吗?
编辑:你们是对的。问题是变量分两步分配,因此没有得到所需的值。下面是最终,工作代码,我决定后以供将来参考:
// Fibonacci generator
function* fibonacci() {
[a, b] = [0, 1]
while (true) {
yield a;
[a, b] = [b, a + b]
}
}
// Instantiates the fibonacci generator
var fib = fibonacci();
// gets first 10 numbers from the Fibonacci generator starting from 0
for (let i = 0; i < 10; i++) {
console.log(fib.next().value);
}
非常感谢您!
你能解释你认为是错的吗?更好的是,你可以添加一个失败的测试并解释出了什么问题?此外,stackovflow允许您将代码嵌入到可运行的小部件中,以便每个人都可以简单地运行要添加的测试,并查看实际存在的错误! –
注意在'b = a + b'你已经设置了'a = b',所以这只是'b = 2 * b'。你可能想做'[a,b] = [b,a + b]'来模拟这两个任务(就像在Python中一样)。 – Frxstrem