Задача 2 «Четные числа Фибоначчи»

Условие:

Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 1 и 2, первые 10 элементов будут:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …

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

Варианты решений:

1. Самый простой и удобочитаемый:

f1, f2, s = 0, 1, 0
while f2 <= 4000000:
    s = s + f2 if f2 % 2 == 0 else s
    f1, f2 = f2, f1 + f2
print(s)

2. Более красивый вариант, с использованием класса:

class FibIter:
    """
    Класс-итератор, возвращающий при каждом вызове __next__ число Фибоначчи.
    limit - максимальное кодичество чисел из ряда Фибоначчи, которое может выдать экземпляр класса.
    """

    def __init__(self, limit):
        self.limit = limit
        self.counter = 0
        self.a, self.b = 0, 1

    def __next__(self):
        if self.counter >= self.limit:
            raise StopIteration
        result = self.a + self.b
        self.a = result
        self.a, self.b = self.b, self.a
        self.counter += 1
        return result

    def __iter__(self):
        return FibIter(self.limit)

    def reset(self):
        self.__init__(self.limit)


F = FibIter(100)
L = [i for i in F if i % 2 == 0 and i < 4_000_000]

print("sum: {}".format(sum(L)))

Пишите в комментариях какой у вас ответ, как быстро выполнилась программа и варианты ваших решений. Потом выберем лучшее.

Смотрите список задач по Проекту Эйлера