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 )
return 0 ;
else if (n== 1 || 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!
Article Tags :
Recommended Articles