Mental Model
Recursion repeats work by solving the same problems many times. Dynamic Programming saves answers to avoid repeating work.
Analogy: Imagine solving a big puzzle by breaking it into smaller pieces. If you solve the same small piece again and again, it wastes time. Dynamic Programming is like writing down the solution to each small piece once, so you never solve it twice.
Recursion tree with repeated nodes:
fib(4)
/ \
fib(3) fib(2)
/ \ / \
fib(2) fib(1) fib(1) fib(0)
/ \
fib(1) fib(0)
Dynamic Programming table:
Index: 0 1 2 3 4
Value: 0 1 [1][2][3]
↑ ↑ ↑ ↑
stored answers reused