Условие:
Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 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)))
Пишите в комментариях какой у вас ответ, как быстро выполнилась программа и варианты ваших решений. Потом выберем лучшее.
