Храните два соседних числа и после каждого yield одновременно обновляйте их. Генератор может выдавать последовательность бесконечно.
Генератор последовательности Фибоначчи – вариант 2
Храните два соседних числа и после каждого yield одновременно обновляйте их. Генератор может выдавать последовательность бесконечно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте генератор, который будет последовательно возвращать элементы последовательности Фибоначчи.
def fib_gen():
pass
Ответ
Храните два соседних числа и после каждого yield одновременно обновляйте их. Генератор может выдавать последовательность бесконечно.
def fib_gen():
previous, current = 0, 1
while True:
yield previous
previous, current = current, previous + current
Начало последовательности: 0, 1, 1, 2, 3, 5, 8. Одновременное присваивание использует старые значения обеих переменных, поэтому сумма вычисляется правильно. Для ограниченного потребления:
from itertools import islice
first_seven = list(islice(fib_gen(), 7))
Нельзя вызывать list(fib_gen()) без ограничения: генератор не завершится. Число хранимых переменных постоянно, но сами целые числа растут, поэтому их битовая память со временем увеличивается.