Циклы в генераторах в JavaScript

Внутри генераторов можно использовать циклы. При этом мы можем ставить циклы на паузу с помощью yield. Давайте посмотрим на примере. Будем ставить цикл на паузу каждую итерацию:

javascriptfunction *func() {
  for (let i = 1; i <= 3; i++) {
    yield i;
  }
}

Получим итератор:

javascriptlet iter = func();

Проверим работу нашего итератора:

javascriptconsole.log(iter.next()); // {value: 1, done: false}
console.log(iter.next()); // {value: 2, done: false}
console.log(iter.next()); // {value: 3, done: false}
console.log(iter.next()); // {value: undefined, done: true}
Задание 1

Создайте итератор, каждый вызов которого будет возвращать числа от 10 до нуля.

Задание 2

Сделайте генератор, который параметром будет принимать число. Пусть каждый вызов итератора уменьшает число на единицу, пока не будет достигнут ноль.

Задание 3

Сделайте генератор, который параметром будет принимать число. Пусть каждый вызов итератора уменьшает число в два раза и возвращает результат. И так, пока число не станет меньше единицы.

Задание 4

Сделайте итератор, каждый вызов которого будет возвращать следующую степень двойки.

Задание 5

Сделайте итератор, каждый вызов которого будет возвращать следующее число Фибоначчи.