The Factorial Recursion

It’s the example of recursion most often used, but it’s not the best example. Of course, to illustrate a better example you need to approach concepts such as fractals and graphical programming doodads. My favorite form of recursion is traversing a directory tree. Regardless, the code for a factorial recursion remains the go-to workhorse.

As a reminder, a factorial is a mathematical calculation expressed as n!, which I pronounce, “N-bang.” Mathematicians would say, “N factorial,” but they’re not C programmers.

The calculation for n! is n × n-1 × n-2 × n-3 . . . n×1.

In an earlier Lesson, I showed how this calculation could be coded by using a loop. Below you see an example of coding a factorial by using recursion, i.e., a function that calls itself.

#include <stdio.h>

long factorial(long f);

int main()
{
    long a,b;

    printf("Enter an integer: ");
    scanf("%ld",&a);
    b = factorial(a);
    printf("%ld! = %ld\n",a,b);

    return(0);
}

long factorial(long f)
{
    if(f == 1)
        return(f);
    else
        return(f*factorial(f-1));
}

The factorial() function calls itself at Line 22, which is also where the factorial calculation is made:

f*factorial(f-1);

The insane part of this process is that the function calls itself in the return statement, which is typical of many recursive functions.

In the C language, what goes into the parentheses happens first, so before anything is returned, the function calls itself with a decremented value of variable f.

The effect is that f slides from its initial value down to 1, which is caught at Line 19. Then the value 1 is returned at Line 20.

Where is it returned to?

The value is returned to Line 22, where it’s multiplied by the previous value of f, or f+1. So the recursive calculation happens as the function unwinds, and it’s done backwards: f × f+1 × f+2 × f+3 . . . × f. That value keeps returning until it’s finally returned from the function.

That’s one recursive way to do a factorial. Other examples of recursion pop up in programming all the time, although it’s not as popular of a technique as working a loop.

I admit that recursion isn’t the easiest thing to comprehend. In a future Lesson, I’ll explore traversing a directory tree by using recursion. That’s the example I coded that best taught me how recursion works.