clojure-koans/src/koans/recursion.clj

40 lines
908 B
Clojure

(defn is-even? [n]
(if (= n 0) __
(___ (is-even? (dec n)))))
(defn is-even-bigint? [n]
(loop [n n acc true]
(if (= n 0) __
(recur (dec n) (not acc)))))
(defn factorial [n]
__)
(meditations
"Recursion ends with a base case"
(= true (is-even? 0))
"And starts by moving toward that base case"
(= false (is-even? 1))
"Having too many stack frames requires explicit tail calls with recur"
(= false (is-even-bigint? 100003N))
"Simple things may appear simple."
(= 1 (factorial 1))
"They may require other simple steps."
(= 2 (factorial 2))
"Sometimes a slightly bigger step is necessary"
(= 6 (factorial 3))
"And eventually you must think harder"
(= 24 (factorial 4))
"You can even deal with very large numbers"
(= (factorial 1000N) (factorial 1000N))
"But what happens when the machine limits you?"
(= (factorial 10000N) (factorial 10000N)))