# C/C++ Program for n-th Fibonacci number

• Difficulty Level : Easy
• Last Updated : 20 Nov, 2018

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 )

 `//Fibonacci Series using Recursion``#include``int` `fib(``int` `n)``{``   ``if` `(n <= 1)``      ``return` `n;``   ``return` `fib(n-1) + fib(n-2);``}`` ` `int` `main ()``{``  ``int` `n = 9;``  ``printf``(``"%d"``, fib(n));``  ``getchar``();``  ``return` `0;``}`

Method 2 (Dynamic Programming)

 `//Fibonacci Series using Dynamic Programming``#include`` ` `int` `fib(``int` `n)``{``  ``/* Declare an array to store Fibonacci numbers. */``  ``int` `f[n+1];``  ``int` `i;`` ` `  ``/* 0th and 1st number of the series are 0 and 1*/``  ``f = 0;``  ``f = 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];``}`` ` `int` `main ()``{``  ``int` `n = 9;``  ``printf``(``"%d"``, fib(n));``  ``getchar``();``  ``return` `0;``}`

Method 3 (Dynamic Programming with Space Optimization)

 `// Fibonacci Series using Space Optimized Method``#include``int` `fib(``int` `n)``{``  ``int` `a = 0, b = 1, c, i;``  ``if``( n == 0)``    ``return` `a;``  ``for` `(i = 2; i <= n; i++)``  ``{``     ``c = a + b;``     ``a = b;``     ``b = c;``  ``}``  ``return` `b;``}`` ` `int` `main ()``{``  ``int` `n = 9;``  ``printf``(``"%d"``, fib(n));``  ``getchar``();``  ``return` `0;``}`

Method 4 (Divide and Conquer)

 `#include `` ` `/* Helper function that multiplies 2 matrices F and M of size 2*2, and``  ``puts the multiplication result back to F[][] */``void` `multiply(``int` `F, ``int` `M);`` ` `/* 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 */``void` `power(``int` `F, ``int` `n);`` ` `int` `fib(``int` `n)``{``  ``int` `F = {{1,1},{1,0}};``  ``if` `(n == 0)``      ``return` `0;``  ``power(F, n-1);`` ` `  ``return` `F;``}`` ` `void` `multiply(``int` `F, ``int` `M)``{``  ``int` `x =  F*M + F*M;``  ``int` `y =  F*M + F*M;``  ``int` `z =  F*M + F*M;``  ``int` `w =  F*M + F*M;`` ` `  ``F = x;``  ``F = y;``  ``F = z;``  ``F = w;``}`` ` `void` `power(``int` `F, ``int` `n)``{``  ``int` `i;``  ``int` `M = {{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 */``int` `main()``{``  ``int` `n = 9;``  ``printf``(``"%d"``, fib(n));``  ``getchar``();``  ``return` `0;``}`

Method 5 (Divide and Conquer)

 `#include `` ` `void` `multiply(``int` `F, ``int` `M);`` ` `void` `power(``int` `F, ``int` `n);`` ` `/* function that returns nth Fibonacci number */``int` `fib(``int` `n)``{``  ``int` `F = {{1,1},{1,0}};``  ``if` `(n == 0)``    ``return` `0;``  ``power(F, n-1);``  ``return` `F;``}`` ` `/* Optimized version of power() in method 4 */``void` `power(``int` `F, ``int` `n)``{``  ``if``( n == 0 || n == 1)``      ``return``;``  ``int` `M = {{1,1},{1,0}};`` ` `  ``power(F, n/2);``  ``multiply(F, F);`` ` `  ``if` `(n%2 != 0)``     ``multiply(F, M);``}`` ` `void` `multiply(``int` `F, ``int` `M)``{``  ``int` `x =  F*M + F*M;``  ``int` `y =  F*M + F*M;``  ``int` `z =  F*M + F*M;``  ``int` `w =  F*M + F*M;`` ` `  ``F = x;``  ``F = y;``  ``F = z;``  ``F = w;``}`` ` `/* Driver program to test above function */``int` `main()``{``  ``int` `n = 9;``  ``printf``(``"%d"``, fib(9));``  ``getchar``();``  ``return` `0;``}`

Please refer complete article on Program for Fibonacci numbers for more details!

My Personal Notes arrow_drop_up