H. Генератор Фибоначчи

Числа Фибоначчи весьма интересная последовательность и используется в различных математических задачах. В ней каждый следующий элемент равен сумме двух предыдущих. Математики начинают эту последовательность с двух единиц, но мы же с вами программисты, поэтому привыкли вести счет с нуля.

Напишите генератор fibonacci, который последовательно возвращает заданное количество чисел Фибоначчи по “правилам программистов”.

Примечание

Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.

Пример

Ввод

print(*fibonacci(5))

Вывод

0 1 1 2 3

Ввод

print(*fibonacci(10), sep=', ')

Вывод

0, 1, 1, 2, 3, 5, 8, 13, 21, 34

Лирическое отступление

Надо сказать, что заявляя, что математики начинают последовательность с двух единиц, Яндекс выставляет себя не в лучшем свете. В его материалах в примерах с рекурсией указаны неправильные значения чисел Фибоначчи именно по той причине, что Яндекс сам начинает считать последовательность Фибоначчи с двух единиц прямо в теоретическом материале к этой задаче

Математики же как раз считают последовательность Фибоначчи с нуля и единицы.

Решение

Первая задача на генераторы. С учетом того, что функция по большому счету от генератора отличается только способом возрата значения, задача элементарна: Реализуем алгоритм вычисления последовательности Фибоначчи и на каждой итерации возвращаем полученое число с помощью yeld.

Посмотреть код

Решение

Python
def fibonacci(num):
    a = 0
    b = 1
    for _ in range(num):
        yield a
        a, b = b, a + b
Подписаться
Уведомить о
guest
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Ольга
Ольга
07.10.2024 18:50

Скажите, пожалуйста, уместно ли использование кеширования для сокращения времени вычисления? Ведь n может иметь существенную величину…

from functools import lru_cache

@lru_cache(maxsize=1000)
def fibonacci(n):
    n_1, n_2 = 01
    for i in range(n):
        yield n_1
        n_1, n_2 = n_2, n_1 + n_2

Ольга
Ольга
Ответить на  Сергей Клочко
07.10.2024 20:52

А! Да! Точно. Спасибо!!!