(defparameter *memo* (make-hash-table))
(defun f (n)
(let ((m (gethash n *memo*)))
(if m
m
(setf (gethash n *memo*)
(cond ((= n 0) 4)
((= n 1) 17/4)
(t (+ (- 108 (/ 815 (f (- n 1))))
(/ 1500 (* (f (- n 1)) (f (- n 2)))))))))))
(let ((a (f 3)))
(format t "~A~%" a)
(format t "~,10F~%" a)
;; stackoverflow.com/a/3321167
(multiple-value-bind (q r) (truncate a)
(format t "~D.~10,'0,D~%" q (truncate (* (abs r) (expt 10 10))))))
KGRlZnBhcmFtZXRlciAqbWVtbyogKG1ha2UtaGFzaC10YWJsZSkpCgooZGVmdW4gZiAobikKICAobGV0ICgobSAoZ2V0aGFzaCBuICptZW1vKikpKQogICAgKGlmIG0KICAgICAgICBtCiAgICAgICAgKHNldGYgKGdldGhhc2ggbiAqbWVtbyopCiAgICAgICAgICAgICAgKGNvbmQgKCg9IG4gMCkgNCkKICAgICAgICAgICAgICAgICAgICAoKD0gbiAxKSAxNy80KQogICAgICAgICAgICAgICAgICAgICh0ICgrICgtIDEwOCAoLyA4MTUgKGYgKC0gbiAxKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICgvIDE1MDAgKCogKGYgKC0gbiAxKSkgKGYgKC0gbiAyKSkpKSkpKSkpKSkKCihsZXQgKChhIChmIDMpKSkKICAoZm9ybWF0IHQgIn5BfiUiIGEpCiAgKGZvcm1hdCB0ICJ+LDEwRn4lIiBhKQogIDs7IHN0YWNrb3ZlcmZsb3cuY29tL2EvMzMyMTE2NwogIChtdWx0aXBsZS12YWx1ZS1iaW5kIChxIHIpICh0cnVuY2F0ZSBhKQogICAgKGZvcm1hdCB0ICJ+RC5+MTAsJzAsRH4lIiBxICh0cnVuY2F0ZSAoKiAoYWJzIHIpIChleHB0IDEwIDEwKSkpKSkpCg==