javafibonacci

Java Fibonacci Sequence fast method


I need a task about finding Fibonacci Sequence for my independent project in Java. Here are methods for find.

private static long getFibonacci(int n) {
    switch (n) {
        case 0:
            return 0;
        case 1:
            return 1;
        default:
            return (getFibonacci(n-1)+getFibonacci(n-2));
    }
}

private static long getFibonacciSum(int n) {
    long result = 0;

    while(n >= 0) {
        result += getFibonacci(n);
        n--;
    }
    return result;
}

private static boolean isInFibonacci(long n) {
    long a = 0, b = 1, c = 0;

    while (c < n) {
        c = a + b;
        a = b;
        b = c;
    }

    return c == n;
}

Here is main method:

    long key = getFibonacciSum(n);
    System.out.println("Sum of all Fibonacci Numbers until Fibonacci[n]: "+key);

    System.out.println(getFibonacci(n)+" is Fibonacci[n]");

    System.out.println("Is n2 in Fibonacci Sequence ?: "+isInFibonacci(n2));

Codes are completely done and working. But if the n or n2 will be more than normal (50th numbers in Fib. Seq.) ? Codes will be runout. Are there any suggestions ?


Solution

  • This method of solution is called dynamic programming

    1. In this method we are remembering the previous results
    2. so when recursion happens then the cpu doesn't have to do any work to recompute the same value again and again

      class fibonacci
      {
      static int fib(int n)
       {
      /* Declare an array to store Fibonacci numbers. */
         int f[] = new int[n+1];
         int i;
      
         /* 0th and 1st number of the series are 0 and 1*/
         f[0] = 0;
         f[1] = 1;
      
         for (i = 2; i <= n; i++)
         {
             /* Add the previous 2 numbers in the series
              and store it */
             f[i] = f[i-1] + f[i-2];
          }
      
          return f[n];
        }
      
      public static void main (String args[])
          {
             int n = 9;
             System.out.println(fib(n));
          }
      }