Генератор хранит предыдущий и следующий элементы, выдаёт первый через yield и обновляет пару. Начальные значения — 0 и 1.
Итератор последовательности Фибоначчи
Генератор хранит предыдущий и следующий элементы, выдаёт первый через yield и обновляет пару. Начальные значения — 0 и 1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте генератор, который последовательно возвращает элементы последовательности Фибоначчи: 0, 1, 1, 2, 3, 5, 8, ….
Ответ
Генератор хранит предыдущий и следующий элементы, выдаёт первый через yield и обновляет пару. Начальные значения — 0 и 1.
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
Пример ограниченного использования:
from itertools import islice
assert list(islice(fibonacci(), 7)) == [0, 1, 1, 2, 3, 5, 8]
Генератор бесконечный, поэтому потребитель должен сам остановиться. Одновременное присваивание важно: сумма использует старые значения a и b. Не создаётся список всех ранее выданных чисел. При больших индексах растёт длина самих целых чисел и стоимость арифметики, несмотря на постоянное число переменных.