Генератор последовательности Фибоначчи – вариант 2

Храните два соседних числа и после каждого yield одновременно обновляйте их. Генератор может выдавать последовательность бесконечно.

Короткий ответ

Что ответить на собеседовании

Храните два соседних числа и после каждого 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()) без ограничения: генератор не завершится. Число хранимых переменных постоянно, но сами целые числа растут, поэтому их битовая память со временем увеличивается.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее