You now understand recursion. Base case, recursive case, call stack, tracing. You can write recursive solutions with confidence. But recursion has a problem.
Try writing a recursive Fibonacci function and calling fib(). It takes forever. Why? The same subproblems get computed over and over. The next section shows you how to fix this.
You'll add a few lines of code that turn exponential slowness into lightning speed. It's called memoization, and it's the foundation of dynamic programming. Before moving on, make sure you're comfortable with the recursion problems here. The next section builds directly on what you learned here.