Step 1: Call fib(5), no cache yet
cache = {}
fib(5) -> fib(4) + fib(3)Why: Start breaking down fib(5) into smaller problems
Step 2: Call fib(4), no cache yet
cache = {}
fib(4) -> fib(3) + fib(2)Why: Need fib(4) to compute fib(5)
Step 3: Call fib(3), no cache yet
cache = {}
fib(3) -> fib(2) + fib(1)Why: Need fib(3) to compute fib(4)
Step 4: Call fib(2), no cache yet
cache = {}
fib(2) -> fib(1) + fib(0)Why: Need fib(2) to compute fib(3)
Step 5: fib(1) and fib(0) are base cases, return 1 and 0
cache = {}
fib(2) = 1 + 0 = 1Why: Base cases stop recursion
Step 6: Store fib(2) = 1 in cache
cache = {2: 1}Why: Remember fib(2) to avoid recomputing
Step 7: Call fib(1), base case returns 1
cache = {2: 1}Step 8: Calculate fib(3) = fib(2) + fib(1) = 1 + 1 = 2 and store in cache
cache = {2: 1, 3: 2}Why: Store fib(3) result for reuse
Step 9: Call fib(2) again, found in cache as 1
cache = {2: 1, 3: 2}Why: Reuse cached fib(2) to save time
Step 10: Calculate fib(4) = fib(3) + fib(2) = 2 + 1 = 3 and store in cache
cache = {2: 1, 3: 2, 4: 3}Why: Store fib(4) result for reuse
Step 11: Call fib(3) again, found in cache as 2
cache = {2: 1, 3: 2, 4: 3}Why: Reuse cached fib(3) to save time
Step 12: Calculate fib(5) = fib(4) + fib(3) = 3 + 2 = 5 and store in cache
cache = {2: 1, 3: 2, 4: 3, 5: 5}Why: Final answer stored for fib(5)
Result: fib sequence cache: {2:1, 3:2, 4:3, 5:5}
Answer: 5