From the above program we shall understand how stack frame gets effected when using recursion function.
So we called the function with n = 3 value. We know that, in C, local c variables are stored in stack. When you call a function, it’s activation record along with unction parameters are also stored.
So from main() function we call fun() function.
Stack Frame:
Recursion and Stack Frame
Changes in the fun() function:
 int fun(3 )

{

    if (n == 1)

        return 1; // base case

    else

        return 1 + fun(2);

}
As we are calling fun (2), we transfer the control from fun (3) to fun (2) as shown above.
Now int fun (2)
Stack Frame:
 Stack Frame:
 Changes in the fun() function:
int fun( 2 )

{

   if (n == 1)

      return 1; // base case

    else

      return 1 + fun(1);

}
Now we call fun (1) from fun (2). Hence we transfer the control from fun (2) to fun (1).
Stack frame:
recursion_stack
Changes in the fun () function.
int fun( 1 )

{

    if (n == 1)

        return 1; // base case

}
Now in fun (1) now “n == 1” is true, hence we return 1. Which mean, we are returning 1 to the calling function from the stack frame. We can see that the calling function is fun (2).
int fun( 2 )
 
{
 
      else
 
          return 1 + fun(1);
 
}
int fun( 2 )

{

      else

         return 1 + 1; // return 2

}
Hence, 2 will get returned to the calling function of fun (2).
From the stack frame, we can see that fun (3) is calling fun (2). Hence the fun (3) will become:
int fun( 3 )

{

     else

        return 1 + fun( 2 );

}

int fun( 3 )

{

    else

        return 1 + 2; // return 3

}
Now the value “3” will be returned to its calling function i.e main function.
On a high level we can summarize the above steps as below:
recursion_stack

2.4 What is a Recursion Tree?

As we saw in previous section, we saw what a recursion is and how the stack frame changes when a recursive call is made.
A recursion tree is nothing but a visual representation of recursive calls.
Let’s understand the recursion tree by taking an example of printing n^th Fibonacci number.
The pseudo code to find nth Fibonacci number is as below:
fib( n )
{
	int n <= 1
		return n;

	else
		return fib ( n -1 ) + fib ( n - 2 )
}
and when we call the fib function with n = 5. The stack framer and Fibonacci tree is as shown below:
recursion_tree
Then fib ( 5 ) is a recursive call it will be:
recursion_tree
Right now the compiler is executing fib ( 4 ) all the other are in paused state.
Then fib ( 4 ) will make a call to fib ( 3 ), fib ( 3 ) will make a call to fib ( 2 ), fib (2) will call fib ( 1 )… it can be showed as below
recursion_tree
Now fib ( 1 ), it will return 1 and also it is popped from stack.
recursion_tree
Now fib ( 2 ) is in stack, it will call fib ( 0 ) and fib (0) will be put into stack.
recursion_tree
Now fib ( 0 ) will return 0 and as fib ( 2 ) has called fib (  0 ) and fib ( 1 ) the final value for fib (  2 ) will be 1, and fib ( 2 ) will be popped out of stack. Now the execution will flow to fib ( 3 ).
recursion_tree
Now fib ( 3 ) already called fib ( 2 ) hence it will call fib ( 1 ) and fib ( 1 ) will be placed into the stack.
recursion_tree
Again fib ( 1 ) will call fib ( 0 ) and it can be showed as below:
recursion_tree
Now for fib ( 4 ), it already called fib ( 3 ), hence it will call fib ( 2 ),  again fib ( 2 )will call fib ( 0 ) and fib ( 1 ).
The calculated values can be as below:
recursion_tree
Hence fib ( 4 ) value will be “ 2 + 1 = 3”. 3 will be returned to fib ( 5 )
Again fib ( 5 ) will call fib ( 3 ), fib ( 3 ) will call fib ( 2 ), then fib ( 2 ) will call fib ( 1 ). Fib ( 1 ) will return 0.
recursion_tree
The final recursion tree will be as below:
recursion_tree
 This is the basic of recursion and the changes in the stack frame when you call a recursion function.
This is an important topic. Because in the next chapter i.e dynamic programming and backtracking it uses recursion to get the results.

Leave a Reply

Your email address will not be published. Required fields are marked *