Mental Model
Recursion solves problems by breaking them into smaller parts, but it can repeat work many times. Dynamic programming remembers past results to avoid repeating work.
Analogy: Imagine solving a big puzzle by solving small pieces. Recursion tries the same small piece many times, but dynamic programming writes down solved pieces so you don't redo them.
Recursion tree:
(root)
/ \
(sub1) (sub2)
/ \ / \
(sub1a)(sub1b)(sub2a)(sub2b)
Dynamic Programming table:
[ solved_sub1, solved_sub2, solved_sub1a, solved_sub1b, ... ]