Skip to content

Commit c8992d2

Browse files
committed
implemented new version of pow with O(lg n) running time
1 parent e234a35 commit c8992d2

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

src/algorithms/core.clj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,21 @@
66
(recur b (mod a b))))
77

88
(defn pow [n exp]
9+
"naive version O(n)"
910
(if (= 0 exp)
1011
1
1112
(*' n (pow n (dec exp)))))
1213

14+
(defn pow2 [n exp]
15+
"better version O(lg n)"
16+
(if (= 0 exp)
17+
1
18+
(if (even? exp)
19+
(let [mem (pow2 n (/ exp 2))]
20+
(*' mem mem))
21+
(let [mem (pow2 n (/ (- exp 1) 2))]
22+
(*' mem mem n)))))
23+
1324
(def fib-seq
1425
(iterate (fn [[x y]] [y (+' x y)]) [0 1]))
1526

0 commit comments

Comments
 (0)