Java Program for n-th Fibonacci numbers
In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation
Fn = Fn-1 + Fn-2
with seed values
F0 = 0 and F1 = 1.
Method 1 ( Use recursion )
Java
// Fibonacci Series using Recursion class Fibonacci { static int fib( int n) { if (n== 0 ||n== 1 ) return 0 ; else if (n== 2 ) return 1 ; return fib(n - 1 ) + fib(n - 2 ); } public static void main(String args[]) { int n = 9 ; System.out.println(fib(n)); } } /* This code is contributed by Musharraf Hassan */ |
Output:
34
Method 2 ( Use Dynamic Programming )
Java
// Fibonacci Series using Dynamic Programming 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 ; if (n > 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)); } } /* This code is contributed by Rajat Mishra and improved by MichaelJoshuaRamos */ |
Output:
34
Method 3 ( Use Dynamic Programming with Space Optimization)
Java
// Java program for Fibonacci Series using Space // Optimized Method class Fibonacci { static int fib( int n) { int a = 0 , b = 1 , c; if (n == 0 ) return a; for ( int i = 2 ; i <= n; i++) { c = a + b; a = b; b = c; } return b; } public static void main(String args[]) { int n = 9 ; System.out.println(fib(n)); } } // This code is contributed by Mihir Joshi |
Output:
34
Method 4 (Divide and Conquer)
Java
class Fibonacci { static int fib( int n) { int F[][] = new int [][] { { 1 , 1 }, { 1 , 0 } }; if (n == 0 ) return 0 ; power(F, n - 1 ); return F[ 0 ][ 0 ]; } /* Helper function that multiplies 2 matrices F and M of size 2*2, and puts the multiplication result back to F[][] */ static void multiply( int F[][], int M[][]) { int x = F[ 0 ][ 0 ] * M[ 0 ][ 0 ] + F[ 0 ][ 1 ] * M[ 1 ][ 0 ]; int y = F[ 0 ][ 0 ] * M[ 0 ][ 1 ] + F[ 0 ][ 1 ] * M[ 1 ][ 1 ]; int z = F[ 1 ][ 0 ] * M[ 0 ][ 0 ] + F[ 1 ][ 1 ] * M[ 1 ][ 0 ]; int w = F[ 1 ][ 0 ] * M[ 0 ][ 1 ] + F[ 1 ][ 1 ] * M[ 1 ][ 1 ]; F[ 0 ][ 0 ] = x; F[ 0 ][ 1 ] = y; F[ 1 ][ 0 ] = z; F[ 1 ][ 1 ] = w; } /* Helper function that calculates F[][] raise to the power n and puts the result in F[][] Note that this function is designed only for fib() and won't work as general power function */ static void power( int F[][], int n) { int i; int M[][] = new int [][] { { 1 , 1 }, { 1 , 0 } }; // n - 1 times multiply the matrix to {{1, 0}, {0, 1}} for (i = 2 ; i <= n; i++) multiply(F, M); } /* Driver program to test above function */ public static void main(String args[]) { int n = 9 ; System.out.println(fib(n)); } } /* This code is contributed by Rajat Mishra */ |
Output:
34
Method 5 (Divide and Conquer)
Java
// Fibonacci Series using Optimized Method class Fibonacci { /* function that returns nth Fibonacci number */ static int fib( int n) { int F[][] = new int [][] { { 1 , 1 }, { 1 , 0 } }; if (n == 0 ) return 0 ; power(F, n - 1 ); return F[ 0 ][ 0 ]; } static void multiply( int F[][], int M[][]) { int x = F[ 0 ][ 0 ] * M[ 0 ][ 0 ] + F[ 0 ][ 1 ] * M[ 1 ][ 0 ]; int y = F[ 0 ][ 0 ] * M[ 0 ][ 1 ] + F[ 0 ][ 1 ] * M[ 1 ][ 1 ]; int z = F[ 1 ][ 0 ] * M[ 0 ][ 0 ] + F[ 1 ][ 1 ] * M[ 1 ][ 0 ]; int w = F[ 1 ][ 0 ] * M[ 0 ][ 1 ] + F[ 1 ][ 1 ] * M[ 1 ][ 1 ]; F[ 0 ][ 0 ] = x; F[ 0 ][ 1 ] = y; F[ 1 ][ 0 ] = z; F[ 1 ][ 1 ] = w; } /* Optimized version of power() in method 4 */ static void power( int F[][], int n) { if (n == 0 || n == 1 ) return ; int M[][] = new int [][] { { 1 , 1 }, { 1 , 0 } }; power(F, n / 2 ); multiply(F, F); if (n % 2 != 0 ) multiply(F, M); } /* Driver program to test above function */ public static void main(String args[]) { int n = 9 ; System.out.println(fib(n)); } } /* This code is contributed by Rajat Mishra */ |
Output:
34
Please refer complete article on Program for Fibonacci numbers for more details!
Please Login to comment...