Sum of Fibonacci numbers at even indexes upto N terms
Last Updated :
19 Sep, 2023
Given a positive integer N, the task is to find the value of F2 + F4 + F6 +………+ F2n upto N terms where Fi denotes the i-th Fibonacci number.
The Fibonacci numbers are the numbers in the following integer sequence.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……
Examples:
Input: n = 5
Output: 88
N = 5, So the fibonacci series will be generated from 0th term upto 10th term:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Sum of elements at even indexes = 0 + 1 + 3 + 8 + 21 + 55
Input: n = 8
Output: 1596
0 + 1 + 3 + 8 + 21 + 55 + 144 + 377 + 987 = 1596.
Method-1: This method includes solving the problem directly by finding all Fibonacci numbers till 2n and adding up the only the even indices. But this will require O(n) time complexity.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int calculateEvenSum( int n)
{
if (n <= 0)
return 0;
int fibo[2 * n + 1];
fibo[0] = 0, fibo[1] = 1;
int sum = 0;
for ( int i = 2; i <= 2 * n; i++) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
if (i % 2 == 0)
sum += fibo[i];
}
return sum;
}
int main()
{
int n = 8;
cout << "Even indexed Fibonacci Sum upto "
<< n << " terms: "
<< calculateEvenSum(n) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int calculateEvenSum( int n)
{
if (n <= 0 )
return 0 ;
int fibo[] = new int [ 2 * n + 1 ];
fibo[ 0 ] = 0 ; fibo[ 1 ] = 1 ;
int sum = 0 ;
for ( int i = 2 ; i <= 2 * n; i++) {
fibo[i] = fibo[i - 1 ] + fibo[i - 2 ];
if (i % 2 == 0 )
sum += fibo[i];
}
return sum;
}
public static void main (String[] args) {
int n = 8 ;
System.out.println( "Even indexed Fibonacci Sum upto "
+ n + " terms: " +
+ calculateEvenSum(n));
}
}
|
Python 3
def calculateEvenSum(n) :
if n < = 0 :
return 0
fibo = [ 0 ] * ( 2 * n + 1 )
fibo[ 0 ] , fibo[ 1 ] = 0 , 1
sum = 0
for i in range ( 2 , 2 * n + 1 ) :
fibo[i] = fibo[i - 1 ] + fibo[i - 2 ]
if i % 2 = = 0 :
sum + = fibo[i]
return sum
if __name__ = = "__main__" :
n = 8
print ( "Even indexed Fibonacci Sum upto" ,
n, "terms:" , calculateEvenSum(n))
|
C#
using System;
class GFG
{
static int calculateEvenSum( int n)
{
if (n <= 0)
return 0;
int []fibo = new int [2 * n + 1];
fibo[0] = 0; fibo[1] = 1;
int sum = 0;
for ( int i = 2; i <= 2 * n; i++)
{
fibo[i] = fibo[i - 1] +
fibo[i - 2];
if (i % 2 == 0)
sum += fibo[i];
}
return sum;
}
static public void Main ()
{
int n = 8;
Console.WriteLine( "Even indexed Fibonacci Sum upto " +
n + " terms: " + calculateEvenSum(n));
}
}
|
Javascript
<script>
function calculateEvenSum( n)
{
if (n <= 0)
return 0;
let fibo = Array(2 * n + 1);
fibo[0] = 0;
fibo[1] = 1;
let sum = 0;
for ( i = 2; i <= 2 * n; i++)
{
fibo[i] = fibo[i - 1] + fibo[i - 2];
if (i % 2 == 0)
sum += fibo[i];
}
return sum;
}
let n = 8;
document.write( "Even indexed Fibonacci Sum upto " + n + " terms: " + +calculateEvenSum(n));
</script>
|
PHP
<?php
function calculateEvenSum( $n )
{
if ( $n <= 0)
return 0;
$fibo [2 * $n + 1] = array ();
$fibo [0] = 0; $fibo [1] = 1;
$sum = 0;
for ( $i = 2; $i <= 2 * $n ; $i ++)
{
$fibo [ $i ] = $fibo [ $i - 1] +
$fibo [ $i - 2];
if ( $i % 2 == 0)
$sum += $fibo [ $i ];
}
return $sum ;
}
$n = 8;
echo "Even indexed Fibonacci Sum upto " . $n .
" terms: " . calculateEvenSum( $n ) . "\n" ;
?>
|
Output
Even indexed Fibonacci Sum upto 8 terms: 1596
Time Complexity: O(n)
Auxiliary Space: O(n)
Method-2:
It can be clearly seen that the required sum can be obtained thus:
2 ( F2 + F4 + F6 +………+ F2n ) = (F1 + F2 + F3 + F4 +………+ F2n) – (F1 – F2 + F3 – F4 +………+ F2n)
Now the first term can be obtained if we put 2n instead of n in the formula given here.
Thus F1 + F2 + F3 + F4 +………+ F2n = F2n+2 – 1.
The second term can also be found if we put 2n instead of n in the formula given here
Thus, F1 – F2 + F3 – F4 +………- F2n = 1 + (-1)2n+1F2n-1 = 1 – F2n-1.
So, 2 ( F2 + F4 + F6 +………+ F2n)
= F2n+2 – 1 – 1 + F2n-1
= F2n+2 + F2n-1 – 2
= F2n + F2n+1 + F2n+1 – F2n – 2
= 2 ( F2n+1 -1)
Hence, ( F2 + F4 + F6 +………+ F2n) = F2n+1 -1 .
So in order to find the required sum, the task is to find only F2n+1 which requires O(log n) time.( Refer to method 5 or method 6 in this article.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000;
int f[MAX] = { 0 };
int fib( int n)
{
if (n == 0)
return 0;
if (n == 1 || n == 2)
return (f[n] = 1);
if (f[n])
return f[n];
int k = (n & 1) ? (n + 1) / 2 : n / 2;
f[n] = (n & 1) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))
: (2 * fib(k - 1) + fib(k)) * fib(k);
return f[n];
}
int calculateEvenSum( int n)
{
return (fib(2 * n + 1) - 1);
}
int main()
{
int n = 8;
cout << "Even indexed Fibonacci Sum upto "
<< n << " terms: "
<< calculateEvenSum(n) << endl;
return 0;
}
|
Java
class GFG {
static int MAX = 1000 ;
static int f[] = new int [MAX];
static int fib( int n) {
if (n == 0 ) {
return 0 ;
}
if (n == 1 || n == 2 ) {
return (f[n] = 1 );
}
if (f[n] == 1 ) {
return f[n];
}
int k = (n % 2 == 1 ) ? (n + 1 ) / 2 : n / 2 ;
f[n] = (n % 2 == 1 ) ? (fib(k) * fib(k) + fib(k - 1 ) * fib(k - 1 ))
: ( 2 * fib(k - 1 ) + fib(k)) * fib(k);
return f[n];
}
static int calculateEvenSum( int n) {
return (fib( 2 * n + 1 ) - 1 );
}
public static void main(String[] args) {
int n = 8 ;
System.out.println( "Even indexed Fibonacci Sum upto "
+ n + " terms: "
+ calculateEvenSum(n));
}
}
|
Python3
MAX = 1000 ;
f = [ 0 ] * MAX ;
def fib(n):
if (n = = 0 ):
return 0 ;
if (n = = 1 or n = = 2 ):
f[n] = 1 ;
return f[n];
if (f[n]):
return f[n];
k = (n + 1 ) / / 2 if (n % 2 = = 1 ) else n / / 2 ;
f[n] = (fib(k) * fib(k) + fib(k - 1 ) * fib(k - 1 )) \
if (n % 2 = = 1 ) else ( 2 * fib(k - 1 ) + fib(k)) * fib(k);
return f[n];
def calculateEvenSum(n):
return (fib( 2 * n + 1 ) - 1 );
if __name__ = = '__main__' :
n = 8 ;
print ( "Even indexed Fibonacci Sum upto" ,
n, "terms:" , calculateEvenSum(n));
|
C#
using System;
class GFG
{
static int MAX = 1000;
static int []f = new int [MAX];
static int fib( int n)
{
if (n == 0)
{
return 0;
}
if (n == 1 || n == 2)
{
return (f[n] = 1);
}
if (f[n] == 1)
{
return f[n];
}
int k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
f[n] = (n % 2 == 1) ? (fib(k) * fib(k) +
fib(k - 1) * fib(k - 1))
: (2 * fib(k - 1) + fib(k)) * fib(k);
return f[n];
}
static int calculateEvenSum( int n)
{
return (fib(2 * n + 1) - 1);
}
public static void Main()
{
int n = 8;
Console.WriteLine( "Even indexed Fibonacci Sum upto "
+ n + " terms: "
+ calculateEvenSum(n));
}
}
|
Javascript
<script>
var MAX = 1000;
var f = Array(MAX).fill(0);
function fib(n) {
if (n == 0) {
return 0;
}
if (n == 1 || n == 2) {
return (f[n] = 1);
}
if (f[n] == 1) {
return f[n];
}
var k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
f[n] = (n % 2 == 1) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1)) : (2 * fib(k - 1) + fib(k)) * fib(k);
return f[n];
}
function calculateEvenSum(n) {
return (fib(2 * n + 1) - 1);
}
var n = 8;
document.write( "Even indexed Fibonacci Sum upto " + n + " terms: " + calculateEvenSum(n));
</script>
|
Output
Even indexed Fibonacci Sum upto 8 terms: 1596
Time Complexity: O(logn)
Auxiliary Space: O(logn)
Another approach: Space optimized O(1)
In Method 1 we the current value fibo[i] is only depend upon the previous 2 values i.e. fibo[i-1] and fibo[i-2]. So to optimize the space we can keep track of previous and current values by the help of three variables prev1, prev2 and curr which will reduce the space complexity from O(N) to O(1).
Implementation Steps:
- Create 2 variables prev1 and prev2 to keep track of previous values of fibo.
- Initialize base case prev1 = prev2 = 1.
- Create a variable curr to store current value.
- Create a variable sum used to store the sum of even-indexed sum.
- Iterate over subproblem using loop and update curr.
- After every iteration update prev1 and prev2 for further iterations.
- At last return and print sum.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
int calculateEvenSum( int n)
{
if (n <= 0)
return 0;
int prev1=0 , prev2=1 ;
int curr;
int sum = 0;
for ( int i = 2; i <= 2 * n; i++) {
curr = prev2 + prev1;
if (i % 2 == 0)
sum += curr;
prev1 = prev2;
prev2 = curr;
}
return sum;
}
int main()
{
int n = 8;
cout << "Even indexed Fibonacci Sum upto "
<< n << " terms: "
<< calculateEvenSum(n) << endl;
return 0;
}
|
Java
import java.util.*;
public class GFG {
static int calculateEvenSum( int n)
{
if (n <= 0 )
return 0 ;
int prev1 = 0 , prev2 = 1 ;
int curr;
int sum = 0 ;
for ( int i = 2 ; i <= 2 * n; i++) {
curr = prev2 + prev1;
if (i % 2 == 0 )
sum += curr;
prev1 = prev2;
prev2 = curr;
}
return sum;
}
public static void main(String[] args)
{
int n = 8 ;
System.out.println(
"Even indexed Fibonacci Sum upto " + n
+ " terms: " + calculateEvenSum(n));
}
}
|
Python
def calculate_even_sum(n):
if n < = 0 :
return 0
prev1, prev2 = 0 , 1
curr = 0
even_sum = 0
for i in range ( 2 , 2 * n + 1 ):
curr = prev2 + prev1
if i % 2 = = 0 :
even_sum + = curr
prev1 = prev2
prev2 = curr
return even_sum
if __name__ = = "__main__" :
n = 8
print ( "Even indexed Fibonacci Sum upto {} terms: {}" . format (
n, calculate_even_sum(n)))
|
C#
using System;
class GFG {
static int CalculateEvenSum( int n)
{
if (n <= 0)
return 0;
int prev1 = 0, prev2 = 1;
int curr;
int sum = 0;
for ( int i = 2; i <= 2 * n; i++) {
curr = prev2 + prev1;
if (i % 2 == 0)
sum += curr;
prev1 = prev2;
prev2 = curr;
}
return sum;
}
static void Main( string [] args)
{
int n = 8;
Console.WriteLine(
"Even indexed Fibonacci Sum up to " + n
+ " terms: " + CalculateEvenSum(n));
}
}
|
Javascript
function GFG(n) {
if (n <= 0)
return 0;
let prev1 = 0, prev2 = 1;
let curr;
let sum = 0;
for (let i = 2; i <= 2 * n; i++) {
curr = prev2 + prev1;
if (i % 2 === 0)
sum += curr;
prev1 = prev2;
prev2 = curr;
}
return sum;
}
let n = 8;
console.log( "Even indexed Fibonacci Sum upto "
+ n + " terms: "
+ GFG(n));
|
Output
Even indexed Fibonacci Sum upto 8 terms: 1596
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...