Programa Java para encontrar la suma de los números de serie de Fibonacci de los primeros índices N pares

Para un entero positivo dado N, el propósito es encontrar el valor de F2 + F4 + F6 +…………+ F2n hasta el número N. Donde Fi indica el i-ésimo número de Fibonacci.

La serie de Fibonacci son los números en la secuencia de enteros dada a continuación.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ……

Ejemplos:

Input: n = 4
Output: 33
N = 4, So here the fibonacci series will be produced from 0th term till 8th term:
0, 1, 1, 2, 3, 5, 8, 13, 21
Sum of numbers at even indexes = 0 + 1 + 3 + 8 + 21 = 33.

Input: n = 7
Output: 609
0 + 1 + 3 + 8 + 21 + 55 + 144 + 377 = 609.

Enfoque 1:

Java

// Java Program to find even sum of
// fibonacci Series Till number N
import java.io.*;
  
class geeksforgeeks {
  
    // Computing the value of first fibonacci series
    // and storing the sum of even indexed numbers
    static int Fib_Even_Sum(int N)
    {
        if (N <= 0)
            return 0;
  
        int fib[] = new int[2 * N + 1];
        fib[0] = 0;
        fib[1] = 1;
  
        // Initializing the sum
        int s = 0;
  
        // Adding remaining numbers
        for (int j = 2; j <= 2 * N; j++) {
            fib[j] = fib[j - 1] + fib[j - 2];
  
            // Only considering even indexes
            if (j % 2 == 0)
                s += fib[j];
        }
  
        return s;
    }
  
    // The Driver code
    public static void main(String[] args)
    {
        int N = 11;
  
        // Prints the sum of even-indexed numbers
        System.out.println(
            "Even sum of fibonacci series till number " + N
            + " is: " + +Fib_Even_Sum(N));
    }
}
Producción

Even sum of fibonacci series till number 11 is: 28656

Complejidad de tiempo: O(n)

Enfoque 2:

Se puede ver claramente que la suma requerida se puede obtener así:
2 ( F 2 + F 4 + F 6 +………+ F 2n ) = (F 1 + F 2 + F 3 + F 4 +………+ F 2n ) – (F 1 – F 2 + F 3 – F 4 +………+ F 2n )

Ahora el primer término se puede obtener si ponemos 2n en lugar de n en la fórmula dada aquí .

Así F 1 + F 2 + F 3 + F 4 +………+ F 2n = F 2n+2 – 1.

El segundo término también se puede encontrar si ponemos 2n en lugar de n en la fórmula dada aquí

Así, F 1 – F 2 + F 3 – F 4 +………- F 2n = 1 + (-1) 2n+1 F 2n-1 = 1 – F 2n-1 .

Entonces, 2 ( F 2 + F 4 + F 6 +………+ F 2n )
= F 2n+2 – 1 – 1 + F 2n-1
= F 2n+2 + F 2n-1 – 2
= F 2n + F 2n+1 + F 2n+1 – F 2n – 2
= 2 ( F 2n+1 -1)
Por lo tanto, ( F 2 + F 4 + F 6 +………+ F 2n ) = F 2n+1 -1 .

La tarea es encontrar solo F 2n+1 -1.

A continuación se muestra la implementación del enfoque anterior:

Java

// Java Program to find even indexed
// Fibonacci Sum in O(Log n) time.
  
class GFG {
  
    static int MAX = 1000;
  
    // Create an array for memoization
    static int f[] = new int[MAX];
  
    // Returns n'th Fibonacci number
    // using table f[]
    static int fib(int n)
    {
        // Base cases
        if (n == 0) {
            return 0;
        }
        if (n == 1 || n == 2) {
            return (f[n] = 1);
        }
  
        // If fib(n) is already computed
        if (f[n] == 1) {
            return f[n];
        }
  
        int k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
  
        // Applying above formula [Note value n&1 is 1
        // if n is odd, else 0].
        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];
    }
  
    // Computes value of even-indexed Fibonacci Sum
    static int calculateEvenSum(int n)
    {
        return (fib(2 * n + 1) - 1);
    }
  
    // Driver program to test above function
    public static void main(String[] args)
    {
        // Get n
        int n = 11;
  
        // Find the alternating sum
        System.out.println(
            "Even indexed Fibonacci Sum upto " + n
            + " terms: " + calculateEvenSum(n));
    }
}
Producción

Even indexed Fibonacci Sum upto 8 terms: 1596

Complejidad de tiempo: O (log n)

Publicación traducida automáticamente

Artículo escrito por Kanchan_Ray y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *