# Exercise 3.27

Here is the environment structure with memo-fib defined:

Here is the environment structure during the call of (memo-fib 3), when the procedure is checking if (memo-fib 3) has already been computed.

Following the environment structure model we can see how memoization is working. The environment structure is changing with time (mutation and new frames) so you need to follow the steps to actually understand everything.

It’s also easy to see how memo-fib computes the $$n$$th Fibonacci number in a number of steps proportional to $$n$$. When calling (memo-fib n) it will recursively call itself, storing the result of memo-fib and hence only really computing up to $$n$$ Fibonacci numbers.

Notice how memo-fib calls memo-fib recursively, on the contrary if we define memo-fib to be (memoize fib) the memoization will not works as intended because fib will be called instead of memo-fib during the recursive step and memoization will be lost.