Clojure Koans递归是偶数吗?

dte*_*eoh 13 recursion clojure

我正在通过Clojure Koans工作,我正在接受递归换档.

我不明白如何解决is-even?使用递归.练习部分将此功能定义为:

(defn is-even? [n]
    (if (= n 0)
        true
        (__ (is-even? (dec n)))))
Run Code Online (Sandbox Code Playgroud)

如果我不想使用递归,那么我会将其定义为,(defn is-even? [n] (= (mod n 2) 0))但这违背了练习的要点.

Ger*_*ert 15

像amalloy说的那样,用"不"填补空白.但假设你假设参数只能是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
Run Code Online (Sandbox Code Playgroud)

等等.


ama*_*loy 9

一个数字n即使是:

  1. n 是0
  2. n-1 不是

所以真的,not应该足以填补那空白.最终,你风有N notS周围(= 0 0),其中大部分抵消.