フィボナッチ数/シーケンスを計算するジェネレータをまとめました。しかし、それは私が期待するように動作していません。私はPythonからそれを "蒸散"しましたが、Pythonのように自分のロジックに合わないJavaScriptコードに何があるのかわかりません...誰も私にこのヒントを教えてもらえますか?私は、これは変数のスコープの問題だと思うフィボナッチシーケンスを計算するための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);
}
:
は、ここでは、コードです。私のループ内で、私は(「現在」)3番目の変数を宣言する必要がある理由しかし、私はまだ理解していない
// 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);
}
を:私はこれがそうすることによって動作するようになってきました望ましい結果を得ることができる。何か案は?
編集:皆さんは正しいです。問題は、変数が2つのステップで割り当てられていて、それゆえ望ましい値を得ていないことです。ここで私は今後の参考のために掲載することを決めた決勝、作業コードは、です:
// 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'です。代わりに2つの代入を(Pythonの場合のように)同時に行うには、 '[a、b] = [b、a + b]'を実行するとよいでしょう。 – Frxstrem