Mental Model
Recursion is when a function calls itself to solve smaller parts of a problem until it reaches a simple case.
Analogy: Imagine a set of Russian dolls where each doll contains a smaller doll inside until the smallest doll is reached and then you open them back up in reverse order.
function call stack: main() ↓ recursive_function(n) ↓ recursive_function(n-1) ↓ ... ↓ recursive_function(base_case) ↑ return from base_case ↑ return from recursive_function(n-1) ↑ return from recursive_function(n) ↑ back to main()
