# Recursion — C Programming

Source: https://www.geekswithgeeks.com/en/c/c-recursion

> A function that calls itself to solve smaller sub-problems.

## Russian dolls

Recursion is like opening a **matryoshka doll**: each doll contains a smaller version of itself, until you hit the smallest one that doesn't open further — the **base case**.

## Factorial

Every recursive function needs a base case (stops recursion) and a recursive case (calls itself with a smaller input).

```c
int factorial(int n) {
    if (n <= 1) return 1;        // base case
    return n * factorial(n - 1); // recursive case
}

// factorial(4) -> 4*3*2*1 = 24
```

Output:

```
24
```

## Watch the stack

Each call adds a frame to the **call stack**. No base case (or a wrong one) causes infinite recursion and a **stack overflow** crash.
