11 lines
328 B
Clojure
11 lines
328 B
Clojure
(defn fib [n]
|
|
(letfn [(fib* [n]
|
|
(if (zero? n)
|
|
[0 1]
|
|
(let [[a b] (fib* (quot n 2))
|
|
c (*' a (-' (*' 2 b) a))
|
|
d (+' (*' b b) (*' a a))]
|
|
(if (even? n)
|
|
[c d]
|
|
[d (+' c d)]))))]
|
|
(first (fib* n))))
|