P.S. Можно поподробнее, что именно делает Memoize? Явно превращает рекурсию в цикл?
Нет. Всего лишь кеширует результаты вызовов функции Fib2, тупо не вычисляя всё по несколько раз.
Я правильно понял - запоминается {имя функции, аргументы, результат} и при совпадении имени и аргументов сразу возвращается результат?
То есть все равно получается цикл, хм интересная штука, но работать он будет только для детерминированных функций - если бы например функция fib лезла куда-нибудь по сети и возвращала результат, то такое кэширование было бы бессмысленно, потому что результат не зависел бы от аргументов (они допустим были бы всегда одинаковые - хост и порт).
P.S. Но вообще прикольно, только что сам набросал примерчик, можно писать в функциональном стиле не теряя в производительности. О сколько нам открытий чудных готовит просвещения дух!