Let's trace factorial(5) step by step.
Base case: returns (by definition)
Recursive case:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
Tracing:
factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1 * factorial(0)
factorial(0) = 1 <- Base case
Multiplying back up: . Each call waits for the next before multiplying.