Мне нужно создать генератор функций, который выполняет итерацию по бесконечной последовательности, например, последовательность фибоначчи. Он должен возвращать следующее значение в последовательности при вызове. Я дал прототип функции:генератор функций javascript
function genfib() {
return function fib() {
}
}
следует использовать так:
var fib = genfib();
fib(); // -> returns 0
fib(); // -> returns 1
fib(); // -> returns 1
fib(); // -> returns 2
Я смущен о том, что выполняется каждый раз, когда я называю fib()
. Я попытался сделать что-то вроде
function genfib() {
var count = 1;
if (count === 1) {
count++;
yield 0;
}
else if (count === 2) {
count++;
yield 1;
}
var a = 0;
var b = 1;
return function fib() {
while(1) {
count = a + b;
a = b;
b = count;
yield count;
}
}
}
Но это не работает. Я не знаю, как настроить его для запуска if/else
для первых двух чисел в последовательности fib
, а затем выполнить цикл while
один раз для каждого последующего вызова.
Знаете ли вы, что означает 'yield'? – ncksllvn
Я думаю, что это похоже на возврат, который только приостанавливает функцию, а не завершает ее после возвращения значения – user137717
Если это задание/домашнее задание (из «* Я получил прототип функции *»), то похоже, что вы чтобы узнать о закрытии. Не записывайте генераторы с 'yield'. – Bergi