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 nested Russian dolls where you open one doll to find a smaller one inside, and you keep opening until you find the smallest doll that doesn't open. Then you close them back in reverse order.
function call stack:
main -> func(3) ↑
func(2)
func(1)
base case reached
returning back up