add a caching version of recursive fibonacci, per skiena