Skip to content

Commit 0a2d38b

Browse files
committed
update example solution (no explicit recursion, passes new tests)
1 parent 3e7962d commit 0a2d38b

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed
Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
(ns binary-search)
22

3-
(defn middle [alist]
4-
(-> alist (count) (quot 2)))
5-
63
(defn search-for
7-
[elem alist]
8-
(let [middle (middle alist)
9-
cur-elem (nth alist middle)]
10-
(cond
11-
(= cur-elem elem) middle
12-
(or (= middle (count alist)) (zero? middle)) (throw (Exception. (format "%s not found in list" elem)))
13-
(< cur-elem elem) (+ middle (search-for elem (drop middle alist)))
14-
(> cur-elem elem) (search-for elem (take middle alist)))))
4+
[n coll]
5+
(let [coll (vec coll)]
6+
(loop [low-idx 0
7+
high-idx (dec (count coll))]
8+
(if (> low-idx high-idx)
9+
(throw (Exception. "not found"))
10+
(let [mid-index (quot (+ high-idx low-idx) 2)
11+
mid-item (get coll mid-index)]
12+
(cond
13+
(= n mid-item) mid-index
14+
(> mid-item n) (recur low-idx (dec mid-index))
15+
:else (recur (inc mid-index) high-idx)))))))

0 commit comments

Comments
 (0)