Let us start with this —>
Commonly, a non-recursive solution to a programming problem is more efficient in both runtime and memory space basis than a recursive one.
Then ,
Why recursion?
- Recursive functions are relatively shorter and so they are easier to write and debug.
- If iterative solution is very complex,then recursion would be a good substitute.
- Useful if you are applying the same solution.
What is a recursive function?
1. A function calling itself
This can be shown by
Below is the code snippet
void rec_fn()
{
...
rec_fn();
...
}
2. A function is in a cycle of function calls.
This can be shown by
Code snippet:
void rec_fn()
{
fn1();
return;
}
void fn1()
{
fn2();
return ;
}
void fn2()
{
rec_fn();
return;
}
We are going to study only the 1st type of recursion.
- A program to calculate factorial of a number using recursion
#include<stdio.h>
int factorial(int);
void main()
{
int fact,no;
printf("Enter a number");
scanf("%d",&no);
fact=factorial(no);
printf("\nFactorial = %d",fact);
}
int factorial(int num)
{
if(num==1)
return 1;
else
return num*factorial(num-1);
}
How is recursion implemented by compilers ?
Using a call stack.It is a data structure used by the program to store information about the active subroutines.
Call stack comprises of stack frames also called as activation records.
- For each activation of a function,a stack frame is pushed onto the call stack.
- When function is completely executed,its activation record is popped off from the stack.
- Return value
- Return address——————>where to return after a function has executed.
- Actual parameters————–>parameters that are passed to the called procedure.
- Control link(Dynamic Link)—>points to activation record of calling procedure.
- Access Link(Static Link)
- Saved machine status
- Local variables——————->variables local to a function.
- Temporaries
No comments:
Post a Comment