Mental Model
Recursion lets a function call itself to solve smaller parts of a problem, which loops can't do easily when the number of steps depends on the problem itself.
Analogy: Imagine a set of nested Russian dolls where each doll opens to reveal a smaller one inside. Recursion is like opening each doll one by one until the smallest is reached, then closing them back in reverse order.
Function call stack: main() ↓ func() -> func() -> func() -> ... -> base case ↑ ↑ ↑ ↑ return return return return
