# Tail call optimization¶

Or more specifically, “How to convert a recursive function into a loop based function with no extra effort”

*Replacing a call with a jump instruction is what is effectively Tail Call Optimization (TCO)*

## The elusive factorial function¶

If you’ve ever come across academic texts on recursive, one of the first few examples you’ll come across is that of either computing a factorial or computing fibonacci. Well, lets example these in more detail, shall we?

Note

As a quick refresher, lets go over what the factorial means: Factorial is generally referred to with a leading ! mark. So 1! would be computing the factorial of 1. Similarly, 5! is computing the factorial of 5. All a factorial really is is as follows: 0! = 1 1! = 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1

Hopefully you are seeing a pattern here at this point: n! = n * (n - 1) * (n - 2) * (n - 2) … 3 * 2 * 1

```
// Lets state the factorial recursively
uint64_t compute_factorial(uint16_t n)
{
// Base case
if (n == 0)
return 1;
// Recursive case (until we hit the base case)
return n * compute_factorial(n - 1);
}
```