Skip to content

Instantly share code, notes, and snippets.

@plaster
Last active December 10, 2015 22:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save plaster/4503590 to your computer and use it in GitHub Desktop.
Save plaster/4503590 to your computer and use it in GitHub Desktop.
メモ化再帰実験
(defn fib [n]
(let [a-fib (atom false)]
(reset! a-fib (memoize (fn [n] (if (< 1 n) (+ (@a-fib (- n 1)) (@a-fib (- n 2))) 1))))
(@a-fib n)
))
;;; inspired by @tnoda
(def ^:dynamic *m-fib*)
(defn fibv [n]
(binding [*m-fib* (memoize (fn [x] (if (< 1 x) (+ (*m-fib* (- x 1)) (*m-fib* (- x 2))) 1)))]
(*m-fib* n)
))
plaster@chloe:~/src/clojure-1.5.0-RC1> java -cp clojure-1.5.0-RC1.jar clojure.main
Clojure 1.5.0-RC1
user=> (defn fib [n]
(let [a-fib (atom false)]
(reset! a-fib (memoize (fn [n] (if (< 1 n) (+ (@a-fib (- n 1)) (@a-fib (- n 2))) 1))))
(@a-fib n)
))
#'user/fib
user=> (fib 60)
2504730781961
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment