GFG App
Open App
Browser
Continue

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

## C

 `//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; ` `} `

Time Complexity: O(2n)

Auxiliary Space: O(n)

Method 2 (Dynamic Programming)

## C

 `//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; ` `} `

Time Complexity: O(n)

Auxiliary Space: O(n)

Method 3 (Dynamic Programming with Space Optimization)

## C

 `// 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; ` `} `

Time Complexity: O(n)

Auxiliary Space: O(1)

Method 4 (Divide and Conquer)

## C

 `#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)

## C

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