Skip to content

Instantly share code, notes, and snippets.

@pcalcao
Created January 30, 2013 10:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pcalcao/ea4176719d778ea3ab9e to your computer and use it in GitHub Desktop.
Save pcalcao/ea4176719d778ea3ab9e to your computer and use it in GitHub Desktop.
Several versions of Fibonacci using Clojure
(ns sandbox.Testing)
; Trivial version
(def fib
( fn [x]
(if (< x 2) x
(+ (fib (dec (dec x))) (fib (dec x))))))
; Add some memoization
(def fib_mem
( memoize
( fn [x]
(if (< x 2) x
(+ (fib_mem (dec (dec x))) (fib_mem (dec x)))))))
(def fib_matching_mem
(memoize
(fn [n]
(cond
(= n 0) 0
(= n 1) 1
:else (+ (fib_matching_mem (- n 1))
(fib_matching_mem (- n 2)))))))
(defn fib_map [n]
(last (take (+ n 1)
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))))
(def fib_complex
(lazy-cat [0 1]
(map + fib_complex (rest fib_complex))))
(print "Fib, 20: ") (time (fib 20))
(print "Fib Mem, 20: ") (time (fib_mem 20))
(print "Fib Matching, 20: ") (time (fib_matching 20))
(print "Fib Matching Mem, 20: ") (time (fib_matching_mem 20))
(print "Fib Map, 20: ")(time (fib_map 20))
(println (fib_map 20))
(println (fib_matching_mem 20))
(println (fib_matching 20))
(println (fib_mem 20))
(println (fib 20))
;Now the big boys:
(print "Fib Mem, 20: ") (time (fib_mem 90))
(print "Fib Matching Mem, 20: ") (time (fib_matching_mem 90))
(print "Fib Map, 20: ")(time (fib_map 90))
@taivare
Copy link

taivare commented Aug 10, 2013

Thanks for the examples on destructing , Clojure code on your blog.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment