The base case is the simplest version of the problem. It's your exit condition that stops recursive calls. When you reach it, return a value without making another recursive call.
def factorial(n):
if n == 0: # Base case
return 1
return n * factorial(n - 1)
For factorial, the base case is because by definition. Without a base case, recursion never stops and Python raises a RecursionError. Always define your base case first.