Recursion Clojure Koans是偶数?
我正在研究Clojure Koans,我正在研究递归Koans 我不明白如何使用递归求解Recursion Clojure Koans是偶数?,recursion,clojure,Recursion,Clojure,我正在研究Clojure Koans,我正在研究递归Koans 我不明白如何使用递归求解是偶数?。本练习将此功能部分定义为: (defn is-even? [n] (if (= n 0) true (__ (is-even? (dec n))))) 如果我不想使用递归,那么我会将它定义为(defn是偶数?[n](=(mod n2)0)),但这与练习的重点背道而驰。考虑每个递归递减2。剩下的应该是显而易见的:只有当函数以零结束时,数字才是偶数 编辑:很明显
是偶数?
。本练习将此功能部分定义为:
(defn is-even? [n]
(if (= n 0)
true
(__ (is-even? (dec n)))))
如果我不想使用递归,那么我会将它定义为
(defn是偶数?[n](=(mod n2)0))
,但这与练习的重点背道而驰。考虑每个递归递减2。剩下的应该是显而易见的:只有当函数以零结束时,数字才是偶数
编辑:很明显,我错过了有关填空的备忘录。下面是我为正整数想到的尾部调用优化解决方案:
(defn is-even? [n]
(if (<= n 1)
(= n 0)
(is-even? (- n 2))))
(defn是偶数?[n]
(如果(一个数字n
是偶数,如果:
n
为0
n-1
不是偶数
所以说真的,不
应该足以填补这个空白。最终你会得到N不
s左右(=0)
,而它们中的大多数都会被抵消。就像阿莫利所说的,用“不”来填补空白。但假设参数只能为0或正,则不需要其他基本情况:dec
确保始终以0结尾,奇数返回false,如下所示:
(is-even? 0) ==> base case (= 0 0) ==> true.
(is-even? 1) ==> (not (is-even? (dec 1))
==> (not (is-even? 0))
==> (not true)
==> false
(is-even? 2) ==> (not (is-even? 1))
==> (not false)
==> true
等等。您可以使用recur
函数进行尾部调用优化。如果您不开始解决is event?
函数,那么这个Koan更容易理解,但是如果您从冥想
块中的第一个Koan开始。这有点混乱,但是Koan会慢慢地建立起来,这就是您需要解决的问题我需要开始了。