"Memoization recurses down and remembers. Tabulation flips it: start from the smallest answers and build up, filling a table until the big answer falls out. Same DP, opposite direction, and no recursion at all."
Build Up Instead of Recursing Down
Tabulation is bottom-up dynamic programming. Instead of starting at the big problem and recursing toward the base cases, you start at the base cases and iteratively fill a table forward, computing each entry from entries you've already filled, until you reach the answer you wanted. There's no recursion — it's a plain loop over a table. The base cases are the seed; the final cell is the result. Fibonacci bottom-up: dp[0]=0, dp[1]=1, then loop dp[i] = dp[i-1] + dp[i-2] up to n.
The One New Challenge: Fill Order
The catch tabulation introduces is order: you must fill the table so that whenever you compute an entry, everything it depends on is already there. For Fibonacci that's trivially left-to-right. For a 2D DP (like edit distance), it means filling row by row, or in whatever order respects the dependencies. Memoization handled ordering automatically (the recursion computes dependencies on demand); tabulation makes you think it through. That's the trade: tabulation asks more design effort up front, in exchange for losing the recursion.
The Space Win: Keep Only What You Need
Tabulation unlocks a beautiful optimization memoization can't easily match. Often each table entry depends only on the last row or the last couple of cells — so you don't need the whole table in memory, just a sliding window of it. Fibonacci needs only the previous two values, so a full O(n) table collapses to two variables, O(1) space. Many 2D DPs that look like they need an O(n×m) grid actually only need the previous row, dropping space to O(m). Spotting 'I only depend on the last K cells' is how DP space costs shrink dramatically — a recurring trick worth looking for every time.
Memoization or Tabulation?
They compute the same answers; choose by constraints. Memoization: easier to write (cache a recursion), lazy (only needed states), but recursion-depth-bounded. Tabulation: no recursion limit, often faster, enables the space optimization above, but you must design the fill order and it computes all states. A common workflow: prototype with memoization to get the recurrence right, then convert to tabulation if you need the depth-safety or the space savings. Same DP, picked for the situation.