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