Why no answer when trying to sum even Fibonacci numbers

sum of all even fibonacci numbers below 4000000 answer
sum of all even fibonacci numbers below 4000000 python
even fibonacci numbers python
even fibonacci numbers c++
sum of all even fibonacci numbers below 4000000 answer java
sum of all even fibonacci numbers below 4000000 node js
sum of all even fibonacci numbers below 4000000 javascript
even fibonacci numbers problem 2

I defined a function to calculate fibonacci numbers which works well.

Now I'm trying to add up all the even numbered fibonacci numbers <= n than are also <= 4000000 but I'm getting no output.

Can anyone clarify what I'm doing wrong? Thanks!

def fib_iterative(n):
    a, b = 0, 1
    for i in range(0, n):
        a, b = b, a + b
    return a

def sum_even_fibs(n):
    total = 0
    n = 0
    while fib_iterative(n) < 4000000:
        if fib_iterative(n) % 2 == 0:
            total += fib_iterative(n)
            n += 1
    return total

print(sum_even_fibs(10))
# 1,1,2,3,5,8,13,21,34,55. 
# 2 + 8 + 34 = 44

Your code doesn't work because you are not doing it until n, you are doing it until 4000000.

You can combine both of your functions to create this.

def sum_even_fibs(n):
    a, b = 0, 1
    t = 0
    for i in range(n):
        a, b = b, a + b
        if a % 2 == 0:
            t += a
    return t

print(sum_even_fibs(10)) #44

as someone in the comments pointed out, every third number is even so you can compress this down to

def sum_even_fibs(n):
    a, b = 0, 1
    t = 0
    for i in range(n // 3):
        a, b = a + 2 * b, 2 * a + 3 * b
        t += a
    return t

print(sum_even_fibs(10)) #44

for the specific case where you don't want to do any numbers above 4000000, you can add this if statement

def sum_even_fibs(n):
    a, b = 0, 1
    t = 0
    for i in range(n // 3):
        a, b = a + 2 * b, 2 * a + 3 * b
        if a >= 4000000:
            print("the fibonacci numbers in this calculation exceed 4000000")
            return None
        t += a
    return t

Even Fibonacci numbers, The other methods described work well, but I am partial to exact answers. So, here it is. First, note that the Fibbonacci sequence has a closed form. For every number, check if it is even. If the number is even, add it to the result. An efficient solution is based on the below recursive formula for even Fibonacci Numbers. Recurrence for Even Fibonacci sequence is: EFn = 4EFn-1 + EFn-2 with seed values EF0 = 0 and EF1 = 2. EFn represents n'th term in Even Fibonacci sequence.

With regard to the code:

if fib_iterative(n) % 2 == 0:
    total += fib_iterative(n)
    n += 1

This will only increment n if the nth Fibonacci number is even. That means that, as soon as you reach 1, it becomes an infinite loop. If you put a print(n) immediately between the while and if statements, you'll see this - it will print out 0 followed by a rather large number of 1s (presumably until you get bored and stop it forcefully).

To fix it, you need to bring the n += 1 back one indent level so that it's incremented regardless:

if fib_iterative(n) % 2 == 0:
    total += fib_iterative(n)
n += 1

Even Fibonacci Numbers Sum, the Fibonacci sequence which do not exceed. // given limit. #include<iostream>. using namespace std;. // Returns sum of even Fibonacci numbers which are. Straight iteration over the even valued Fibonacci numbers is fast. fibSum[max_] := Module[ {tot, n, j}, tot = 0; n = 0; j = 3; While[n = Fibonacci[j]; n <= max, j += 3; tot += n]; tot] Or one can use matrix products. This seems to be about the same speed. It has the advantage of not requiring a built in Fibonacci function.

Let's say you were just doing this up to n=5. You should be calculating five fibonacci numbers. Instead, you're calculating all of the fibonacci numbers up to the current one three times! For each n, you should call fib_iterative exactly once and reuse the result. You're also discarding the value of your n parameter.

def sum_even_fibs(n):
    total = 0
    for x in range(n):
        current = fib_iterative(x)
        if current > 4000000:
            break
        if not current % 2:
            total += current
    return total

This is still inefficient, because you're recalculating n-1 values of every time you call fib_iterative(n). Instead, a generator based solution will allow you to calculate each value only once.

from itertools import takewhile

def fib(n):
    x = 0
    y = 1
    for _ in range(n):
        yield x
        x, y = y, x+y

def sum_even_fibs(n):
    fibs = fib(n)
    evens = (x for x in fibs if not x%2)
    less_than_4000000 = takewhile(lambda x: x < 4000000, evens)
    return sum(less_than_4000000)

Problem 2: Even Fibonacci Numbers I didn't understand this challenge, Summing all even numbers below the provided number or what? Because that I did not so far , but I think You must doing a sum Fibonacci seqeunce from even numbers. in the example are 4:29pm #9. Just try it's not easy as it's looks like now. You still didn't answer my question though. eday69 June  I defined a function to calculate fibonacci numbers which works well. Now I'm trying to add up all the even numbered fibonacci numbers <= n than are also <= 4000000 but I'm getting no output.

What is the Fibonacci Sequence (aka Fibonacci Series)?, is thus very nearly ((1+√5)/2)^100/√5, which any good calculator will tell you is almost exactly 354224848179261915075. I'm trying to get the sum of all the even Fibonacci numbers. I can print the numbers out but I can't get the sum of them. Sum of all even Fibonacci numbers

What is the 100th term of the Fibonacci Sequence?, By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms. A little trick to sum Fibonacci numbers. Try it out. A little trick to sum Fibonacci numbers. Try it out. The Golden Ratio and Fibonacci Sequence in Music (feat. It’s Okay to be Smart

sum of even-valued and odd-valued Fibonacci numbers , Solving problem #2 from Project Euler, even Fibonacci numbers. whose values do not exceed four million, find the sum of the even-valued terms. f1.i < 35 ) select sum(FIBO) as "Answer" from FIBONACCI where mod(FIBO, I also thought it would be fun to try it as a lazy enumerator, though I still like my  $\begingroup$ Further to @BrianM.Scott's comment - note that every third Fibonacci number is even, so that gives a GP too. The odd numbers can be summed as two GPs (or as the sum of all the numbers less the sum of the even ones). $\endgroup$ – Mark Bennet Sep 5 '13 at 21:24 |

Comments
  • Remark: odd+odd=even and even+odd=odd, hence even fibonacci numbers are for n%3 == 2.
  • Thanks! This works great but I can't figure out how to only return answers for cases when a <= 4000000 Any clues?
  • @newc00der what would you like the function to return if n is more than 4000000? nothing?
  • A message stating "the fibonacci numbers in this calculation exceed 4000000"
  • Thanks! A few things I've never seen ('itertools', 'takewhile', yield', 'lambda'). I'll try to get my head around them...