 GFG App
Open App Browser
Continue

# 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!

My Personal Notes arrow_drop_up