Recursive function missing out the base condition
suggest changeCalculating the factorial of a number is a classic example of a recursive function.
Missing the Base Condition:
#include <stdio.h>
int factorial(int n)
{
return n * factorial(n - 1);
}
int main()
{
printf("Factorial %d = %d\n", 3, factorial(3));
return 0;
}
Typical output: Segmentation fault: 11
The problem with this function is it would loop infinitely, causing a segmentation fault — it needs a base condition to stop the recursion.
Base Condition Declared:
#include <stdio.h>
int factorial(int n)
{
if (n == 1) // Base Condition, very crucial in designing the recursive functions.
{
return 1;
}
else
{
return n * factorial(n - 1);
}
}
int main()
{
printf("Factorial %d = %d\n", 3, factorial(3));
return 0;
}
Sample output
Factorial 3 = 6
This function will terminate as soon as it hits the condition n
is equal to 1 (provided the initial value of n
is small enough — the upper bound is 12
when int
is a 32-bit quantity).
Rules to be followed:
- Initialize the algorithm. Recursive programs often need a seed value to start with. This is accomplished either by using a parameter passed to the function or by providing a gateway function that is non-recursive but that sets up the seed values for the recursive calculation.
- Check to see whether the current value(s) being processed match the base case. If so, process and return the value.
- Redefine the answer in terms of a smaller or simpler sub-problem or sub-problems.
- Run the algorithm on the sub-problem.
- Combine the results in the formulation of the answer.
- Return the results.
Source: Recursive Function
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents