# Tail Recursion for Fibonacci

• Difficulty Level : Easy
• Last Updated : 26 May, 2022

Write a tail recursive function for calculating the n-th Fibonacci number.
Examples :

```Input : n = 4
Output : fib(4) = 3

Input : n = 9
Output : fib(9) = 34```

Prerequisites : Tail Recursion, Fibonacci numbers
A recursive function is tail recursive when the recursive call is the last thing executed by the function.

Writing a tail recursion is little tricky. To get the correct intuition, we first look at the iterative approach of calculating the n-th Fibonacci number.

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

Here there are three possibilities related to n :-

`n == 0`

`n == 1`

`n > 1`

First two are trivial. We focus on discussion of the case when n > 1.
In our iterative approach for n > 1,

```a = 0
b = 1```

For n-1 times we repeat following for ordered pair (a,b)
Though we used c in actual iterative approach, but the main aim was as below :-

`(a, b) = (b, a+b)`

We finally return b after n-1 iterations.
Hence we repeat the same thing this time with the recursive approach. We set the default values

```a = 0
b = 1```

Here we’ll recursively call the same function n-1 times and correspondingly change the values of a and b.
Finally, return b.
If its case of n == 0 OR n == 1, we need not worry much!
Here is implementation of tail recursive fibonacci code.

## C++

 `// Tail Recursive Fibonacci` `// implementation` `#include ` `using` `namespace` `std;`   `// A tail recursive function to` `// calculate n th fibonacci number` `int` `fib(``int` `n, ``int` `a = 0, ``int` `b = 1)` `{` `    ``if` `(n == 0)` `        ``return` `a;` `    ``if` `(n == 1)` `        ``return` `b;` `    ``return` `fib(n - 1, b, a + b);` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `n = 9;` `    ``cout << ``"fib("` `<< n << ``") = "` `         ``<< fib(n) << endl;` `    ``return` `0;` `}`

## Java

 `// Tail Recursive ` `// Fibonacci implementation`   `class` `GFG` `{` `    ``// A tail recursive function to` `    ``// calculate n th fibonacci number` `    ``static` `int` `fib(``int` `n, ``int` `a, ``int` `b )` `    ``{ ` `        `  `        ``if` `(n == ``0``)` `            ``return` `a;` `        ``if` `(n == ``1``)` `            ``return` `b;` `        ``return` `fib(n - ``1``, b, a + b);` `    ``}` `    `  `    ``public` `static` `void` `main (String[] args) ` `    ``{` `        ``int` `n = ``9``;` `        ``System.out.println(``"fib("` `+ n +``") = "``+ ` `                                 ``fib(n,``0``,``1``) ); ` `    ``}` `}`

## Python3

 `# A tail recursive function to ` `# calculate n th fibonacci number` `def` `fib(n, a ``=` `0``, b ``=` `1``):` `    ``if` `n ``=``=` `0``:` `        ``return` `a` `    ``if` `n ``=``=` `1``:` `        ``return` `b` `    ``return` `fib(n ``-` `1``, b, a ``+` `b);`   `# Driver Code` `n ``=` `9``;` `print``(``"fib("``+``str``(n)``+``") = "``+``str``(fib(n)))`

## C#

 `// C# Program for Tail` `// Recursive Fibonacci ` `using` `System;`   `class` `GFG` `{` `    `  `    ``// A tail recursive function to` `    ``// calculate n th fibonacci number` `    ``static` `int` `fib(``int` `n, ``int` `a , ``int` `b )` `    ``{ ` `        ``if` `(n == 0)` `            ``return` `a;` `        ``if` `(n == 1)` `            ``return` `b;` `        ``return` `fib(n - 1, b, a + b);` `    ``}` `    `  `    ``// Driver Code` `    ``public` `static` `void` `Main () ` `    ``{` `        ``int` `n = 9;` `        ``Console.Write(``"fib("` `+ n +``") = "` `+ ` `                           ``fib(n, 0, 1) ); ` `    ``}` `}`   `// This code is contributed ` `// by nitin mittal.`

## PHP

 ``

## Javascript

 ``

Output :

`fib(9) = 34`

Analysis of Algorithm

```Time Complexity: O(n)
Auxiliary Space : O(n)```

This article is contributed by Pratik Chhajer. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.