Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
def fibonacci_generator():
a = 0
b = 1
while True:
yield a + b
a, b = b, (a + b)
Test fibonacci sequence generator by comparing the result to the example in the task statement.
i = fibonacci_generator()
fib_10 = [next(i) for _ in range(10)]
assert(fib_10 == [1, 2, 3, 5, 8, 13, 21, 34, 55, 89,])
Greate a function which returns all even-valued fibonacci values smaller or equal to four million.
def get_even_fibonaccis_smaller_or_equal_four_million():
r = []
i = fibonacci_generator()
current_value = next(i)
while current_value <= 4000000:
if current_value % 2 == 0:
r.append(current_value)
current_value = next(i)
return r
Calculate the solution.
f = get_even_fibonaccis_smaller_or_equal_four_million()
print(sum(f))
I looked at the solutions in the forum and I kind of forgot about simple straight forward approaches. There is no need to create a list and the sum it up. Instead I can simply increment a counter which will be much faster, but less readable maybe.
r, a, b = 0, 0, 1
while b <= 4000000:
if b % 2 == 0: r += b
a, b = b, a + b
print(r)