We start with a problem solved by simple recursion, like Fibonacci. The recursion calls itself many times for the same inputs, causing repeated work and slow performance. This is because recursion alone does not remember past results. We see in the execution table that fib(2) and fib(1) are called multiple times. To fix this, memoization stores results in a cache so repeated calls return instantly. This technique is called dynamic programming. It makes the solution efficient by reusing results instead of recomputing. The variable tracker shows how the call stack grows and shrinks, and how the memo cache fills up with results. Key moments include understanding why repeated calls happen, how memoization helps, and why recursion alone fails for overlapping subproblems. The visual quiz tests understanding of returned values, when repeated calls are noticed, and how memo cache changes. The quick snapshot summarizes why and when to use dynamic programming.