Tail Recursion for Fibonacci
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,
We start with
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++
#include <iostream>
using namespace std;
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);
}
int main()
{
int n = 9;
cout << "fib(" << n << ") = "
<< fib(n) << endl;
return 0;
}
|
Java
class GFG
{
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
def fib(n, a = 0 , b = 1 ):
if n = = 0 :
return a
if n = = 1 :
return b
return fib(n - 1 , b, a + b);
n = 9 ;
print ( "fib(" + str (n) + ") = " + str (fib(n)))
|
C#
using System;
class GFG
{
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 ()
{
int n = 9;
Console.Write( "fib(" + n + ") = " +
fib(n, 0, 1) );
}
}
|
PHP
<?php
function fib( $n , $a = 0, $b = 1)
{
if ( $n == 0)
return $a ;
if ( $n == 1)
return $b ;
return fib( $n - 1, $b , $a + $b );
}
$n = 9;
echo "fib($n) = " , fib( $n );
return 0;
?>
|
Javascript
<script>
function fib(n, a = 0, b = 1)
{
if (n == 0){
return a;
}
if (n == 1){
return b;
}
return fib(n - 1, b, a + b);
}
let n = 9;
document.write(`fib(${n}) = ${fib(n)}`);
</script>
|
Output :
fib(9) = 34
Analysis of Algorithm
Time Complexity: O(n)
Auxiliary Space : O(n)
Share your thoughts in the comments
Please Login to comment...