From 345df3d6d08e95309d3a9cce8b6ffe57be84a7a0 Mon Sep 17 00:00:00 2001 From: Colin Jones Date: Sun, 7 Nov 2010 10:17:58 -0600 Subject: [PATCH] Add some background knowledge to the recursion section. --- src/koans/recursion.clj | 18 ++++++++++++++++++ src/path_to_answer_sheet.clj | 10 ++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/koans/recursion.clj b/src/koans/recursion.clj index 7f3b2ef..6cd34ba 100644 --- a/src/koans/recursion.clj +++ b/src/koans/recursion.clj @@ -1,7 +1,25 @@ +(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)) diff --git a/src/path_to_answer_sheet.clj b/src/path_to_answer_sheet.clj index ba2f1ff..72a4d53 100644 --- a/src/path_to_answer_sheet.clj +++ b/src/path_to_answer_sheet.clj @@ -55,7 +55,7 @@ 10 5 30 2 15 - 20 "*"] + 20 '*] "___" ['(fn [f] (f 5)) '(fn [f] 25)]} "conditionals" {"__" [:a @@ -63,7 +63,7 @@ 0 :glory 4 6 :your_road - "'doom" 0 ]} + ''doom 0 ]} "higher_order_functions" {"__" [4 8 12 '(* x x) [false false true false false] @@ -90,10 +90,12 @@ :a :b :c :d :c :d] "___" ["multiply-by-5"]} - "recursion" {"__" ['(loop [n n acc 1] + "recursion" {"__" [true 'acc + '(loop [n n acc 1] (if (zero? n) acc - (recur (dec n) (* acc n))))]} + (recur (dec n) (* acc n))))] + "___" ['not]} "destructuring" {"__" ["\":bar:foo\""]} })