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

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] = 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]; ` `} ` ` `  `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[2][2], ``int` `M[2][2]); ` ` `  `/* 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[2][2], ``int` `n); ` ` `  `int` `fib(``int` `n) ` `{ ` `  ``int` `F[2][2] = {{1,1},{1,0}}; ` `  ``if` `(n == 0) ` `      ``return` `0; ` `  ``power(F, n-1); ` ` `  `  ``return` `F[0][0]; ` `} ` ` `  `void` `multiply(``int` `F[2][2], ``int` `M[2][2]) ` `{ ` `  ``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; ` `} ` ` `  `void` `power(``int` `F[2][2], ``int` `n) ` `{ ` `  ``int` `i; ` `  ``int` `M[2][2] = {{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[2][2], ``int` `M[2][2]); ` ` `  `void` `power(``int` `F[2][2], ``int` `n); ` ` `  `/* function that returns nth Fibonacci number */` `int` `fib(``int` `n) ` `{ ` `  ``int` `F[2][2] = {{1,1},{1,0}}; ` `  ``if` `(n == 0) ` `    ``return` `0; ` `  ``power(F, n-1); ` `  ``return` `F[0][0]; ` `} ` ` `  `/* Optimized version of power() in method 4 */` `void` `power(``int` `F[2][2], ``int` `n) ` `{ ` `  ``if``( n == 0 || n == 1) ` `      ``return``; ` `  ``int` `M[2][2] = {{1,1},{1,0}}; ` ` `  `  ``power(F, n/2); ` `  ``multiply(F, F); ` ` `  `  ``if` `(n%2 != 0) ` `     ``multiply(F, M); ` `} ` ` `  `void` `multiply(``int` `F[2][2], ``int` `M[2][2]) ` `{ ` `  ``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; ` `} ` ` `  `/* 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
Article Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.