Mental Model
Recursion is when a function calls itself to solve smaller parts of a problem until it reaches a simple case it can solve directly.
Analogy: Imagine a set of Russian nesting dolls where each doll contains a smaller doll inside. You open each doll until you reach the smallest one, then close them back in reverse order.
function call stack: main() ↓ func() -> func() -> func() -> base case ↑ ↑ ↑ ↑ top next next bottom