Recursion is when a function calls itself to solve a smaller version of the same problem. Every recursion needs a base case that stops it and a recursive case that moves toward the base.
The idea
Break a problem into smaller identical subproblems. Each call pushes a frame onto the call stack; returns pop them off.
Example
python
():
n <= :
n * factorial(n - )
factorial()
