memoizeというのを使ってみた。
(asdf:oos 'asdf:load-op 'memoize)
(defun fib (n)
(if (<= n 1)
1
(+ (fib (- n 1))
(fib (- n 2)))))
(memoize:def-memoized-function fibm (n) (if (<= n 1)
1
(+ (fibm (- n 1))
(fibm (- n 2)))))
実行
* (fib 40) ; 結構待たされる
165580141
* (fibm 40) ; 一瞬
165580141
SBCLでベンチマークの取り方がわからん。