Contenu connexe
Similaire à pre: 数列で学ぶ初めての CommonLisp #fibonacci (6)
pre: 数列で学ぶ初めての CommonLisp #fibonacci
- 2. 01. Profile
Akiko Terada (@pgf2)
Work : software developer
- 7. 04. Dynamic Programming
(defun fib(n)
(let ((n0 0) (n1 1) (i 1) (tmp))
(loop
(if (> i n) (return n0))
(setq tmp (+ n0 n1))
(setq n0 n1)
(setq n1 tmp)
(incf i))))
- 9. 05. Memoization
(setf (symbol-function 'fib)
(let ((table (make-hash-table :test #'equal)))
(labels ((f (n)
(let ((val (gethash n table nil)))
(unless val
(setf val
(cond ((< n 0) 0)
((= n 1) 1)
(t (+ (f (- n 2)) (f (- n 1))))))
(setf (gethash n table) val))
val)))
#'f)))