| 1 | Call fib(4) | 4 | [None, None, None, None, None] | [None, None, None, None, None] | - | [None, None, None, None, None] |
| 2 | Call fib(3) | 3 | [None, None, None, None, None] | [None, None, None, None, None] | - | [None, None, None, None, None] |
| 3 | Call fib(2) | 2 | [None, None, None, None, None] | [None, None, None, None, None] | - | [None, None, None, None, None] |
| 4 | Call fib(1) | 1 | [None, None, None, None, None] | [None, None, None, None, None] | 1 | [None, None, None, None, None] |
| 5 | Call fib(0) | 0 | [None, None, None, None, None] | [None, None, None, None, None] | 0 | [None, None, None, None, None] |
| 6 | Compute fib(2) = 1 + 0 | 2 | [None, None, None, None, None] | [None, None, Some(1), None, None] | 1 | [None, None, Some(1), None, None] |
| 7 | Return to fib(3), call fib(1) | 1 | [None, None, Some(1), None, None] | [None, None, Some(1), None, None] | 1 | [None, None, Some(1), None, None] |
| 8 | Compute fib(3) = fib(2) + fib(1) = 1 + 1 | 3 | [None, None, Some(1), None, None] | [None, None, Some(1), Some(2), None] | 2 | [None, None, Some(1), Some(2), None] |
| 9 | Return to fib(4), call fib(2) | 2 | [None, None, Some(1), Some(2), None] | [None, None, Some(1), Some(2), None] | 1 | [None, None, Some(1), Some(2), None] |
| 10 | Compute fib(4) = fib(3) + fib(2) = 2 + 1 | 4 | [None, None, Some(1), Some(2), None] | [None, None, Some(1), Some(2), Some(3)] | 3 | [None, None, Some(1), Some(2), Some(3)] |
| 11 | Return fib(4) = 3 | 4 | [None, None, Some(1), Some(2), Some(3)] | [None, None, Some(1), Some(2), Some(3)] | 3 | [None, None, Some(1), Some(2), Some(3)] |
| 12 | Call fib(3) again (memo hit) | 3 | [None, None, Some(1), Some(2), Some(3)] | [None, None, Some(1), Some(2), Some(3)] | 2 | [None, None, Some(1), Some(2), Some(3)] |
| 13 | End recursion | - | [None, None, Some(1), Some(2), Some(3)] | [None, None, Some(1), Some(2), Some(3)] | - | [None, None, Some(1), Some(2), Some(3)] |