Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion Clojure Koans是偶数?_Recursion_Clojure - Fatal编程技术网

Recursion Clojure 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。剩下的应该是显而易见的:只有当函数以零结束时,数字才是偶数 编辑:很明显

我正在研究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 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会慢慢地建立起来,这就是您需要解决的问题我需要开始了。