Ah nice to see maths, I came up with the same thing however with a different approach of using generator functions.
Let us forget about fibonacci and think of the even fibonacci as a new series. (I probably think there would be a mathematical way of deducing it, but I just used brute force to find it out)
So the recurrence relation for this series would be
Fn= 4Fn-1 + Fn-2.
To find out the Sum of n elements in this series (let's call this Sn), we can rewrite the recurrence relation like this: 4Fn-1 = Fn - Fn-2
and we can move all n's by 1: 4Fn = Fn+1 - Fn-1
Now we can use the same logic to finder other n's: 4Fn = Fn+1 - Fn-1 4Fn-1 = Fn - Fn-2 4Fn-2 = Fn-1 - Fn-3 4Fn-3 = Fn-2 - Fn-3 ... ... 4F4 = F5 - F3 4F3 = F4 - F2 4F2 = F3 - F1 4F1 = 4F1
For folks not familiar with this technique, we are simply doing to cancel out similar terms when we add all equations. (Note all items in pair are canceled out since x - x = 0).
If you notice the left hand side is essentially equivalent to 4Sn
Now we can finally write the relation between sum and series as:
Sn= ( Fn+1 + Fn - F2 + 3F1 ) / 4
The point is this avoids the for loop for summing all the values. Go ahead and try substituting values and you will find this sums it up. You will have to use F(1) = 2 and F(2) = 8.
Now that we have removed one for loop, how do we get a direct formula for getting the Fn.
This involves a bit more complicated math(for adventurous folks visit austinrochford.com/posts/2013-11-0...).
In short the closed form for this recurrence relation is
And if you compute the roots and follow along the url I posted above, you will end up with this
This gives us a function to compute Fn .
Now we can combine our summing and this formula to get a simple O(1) arithmetic function to get the sum. Side note: Running a for loop will take much less brain time :P
Ah nice to see maths, I came up with the same thing however with a different approach of using generator functions.
Let us forget about fibonacci and think of the even fibonacci as a new series. (I probably think there would be a mathematical way of deducing it, but I just used brute force to find it out)
So the recurrence relation for this series would be
Fn= 4Fn-1 + Fn-2.
To find out the Sum of n elements in this series (let's call this Sn), we can rewrite the recurrence relation like this:
4Fn-1 = Fn - Fn-2
and we can move all n's by 1:
4Fn = Fn+1 - Fn-1
Now we can use the same logic to finder other n's:
4Fn = Fn+1 - Fn-1
4Fn-1 = Fn - Fn-2
4Fn-2 = Fn-1 - Fn-3
4Fn-3 = Fn-2 - Fn-3
...
...
4F4 = F5 - F3
4F3 = F4 - F2
4F2 = F3 - F1
4F1 = 4F1
For folks not familiar with this technique, we are simply doing to cancel out similar terms when we add all equations. (Note all items in pair are canceled out since
x - x = 0
).4Fn = Fn+1 -
Fn-14Fn-1 = Fn -
Fn-24Fn-2 =
Fn-1-Fn-34Fn-3 =
Fn-2-Fn-3...
...
4F4 =
F5-F34F3 =
F4- F24F2 =
F3- F14F1 = 4F1
4Fn + 4Fn-1 + 4Fn-2 + ... + 4F2 + 4F1 = Fn+1 + Fn - F2 + 3F1
If you notice the left hand side is essentially equivalent to
4Sn
Now we can finally write the relation between sum and series as:
The point is this avoids the for loop for summing all the values. Go ahead and try substituting values and you will find this sums it up. You will have to use
F(1) = 2
andF(2) = 8
.Now that we have removed one
for loop
, how do we get a direct formula for getting the Fn.This involves a bit more complicated math(for adventurous folks visit austinrochford.com/posts/2013-11-0...).
In short the closed form for this recurrence relation is
And if you compute the roots and follow along the url I posted above, you will end up with this
This gives us a function to compute Fn .
Now we can combine our summing and this formula to get a simple O(1) arithmetic function to get the sum. Side note: Running a for loop will take much less brain time :P
I applaud your solution, fellow math lover! 👏