| 1 | Call fib(4) | 4 | {} | {"4": ?} | ? | {"4": ?} |
| 2 | Call fib(3) | 3 | {"4": ?} | {"3": ?} | ? | {"4": ?, "3": ?} |
| 3 | Call fib(2) | 2 | {"4": ?, "3": ?} | {"2": ?} | ? | {"4": ?, "3": ?, "2": ?} |
| 4 | Call fib(1) | 1 | {"4": ?, "3": ?, "2": ?} | {"4": ?, "3": ?, "2": ?, "1": 1} | 1 | {"4": ?, "3": ?, "2": ?, "1": 1} |
| 5 | Call fib(0) | 0 | {"4": ?, "3": ?, "2": ?, "1": 1} | {"4": ?, "3": ?, "2": ?, "1": 1, "0": 0} | 0 | {"4": ?, "3": ?, "2": ?, "1": 1, "0": 0} |
| 6 | Compute fib(2) = fib(1)+fib(0) | 2 | {"4": ?, "3": ?, "2": ?, "1": 1, "0": 0} | {"4": ?, "3": ?, "2": 1, "1": 1, "0": 0} | 1 | {"4": ?, "3": ?, "2": 1, "1": 1, "0": 0} |
| 7 | Call fib(1) (memo hit) | 1 | {"4": ?, "3": ?, "2": 1, "1": 1, "0": 0} | Same | 1 | {"4": ?, "3": ?, "2": 1, "1": 1, "0": 0} |
| 8 | Compute fib(3) = fib(2)+fib(1) | 3 | {"4": ?, "3": ?, "2": 1, "1": 1, "0": 0} | {"4": ?, "3": 2, "2": 1, "1": 1, "0": 0} | 2 | {"4": ?, "3": 2, "2": 1, "1": 1, "0": 0} |
| 9 | Call fib(2) (memo hit) | 2 | {"4": ?, "3": 2, "2": 1, "1": 1, "0": 0} | Same | 1 | {"4": ?, "3": 2, "2": 1, "1": 1, "0": 0} |
| 10 | Compute fib(4) = fib(3)+fib(2) | 4 | {"4": ?, "3": 2, "2": 1, "1": 1, "0": 0} | {"4": 3, "3": 2, "2": 1, "1": 1, "0": 0} | 3 | {"4": 3, "3": 2, "2": 1, "1": 1, "0": 0} |
| 11 | Return final result fib(4) | 4 | {"4": 3, "3": 2, "2": 1, "1": 1, "0": 0} | Same | 3 | {"4": 3, "3": 2, "2": 1, "1": 1, "0": 0} |
| 12 | Exit | - | - | - | - | All results memoized, recursion ends |