试图理解 Clojure 中的递归
Trying to understand recursion in Clojure
我是初学者,真的很想理解所以请多多包涵。
我正在研究 Clojure Koans,但在理解递归方面遇到了一些麻烦。
我被这个问题困住了:Clojure Koans recursive is-even?
这是正确的函数:
(defn is-even? [n]
(if (= n 0)
true
(not (is-even? (dec n)))))
这些是给出的很好的例子:
(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
但我很困惑为什么递归不会继续发生,直到你每次都剩下 0。
例如,n=2。以下是我如何推理我脑海中发生的事情:2 不等于 0,那么
(not (is-even? 1)) 得到评估。当这个被评估时,1 被插入是偶数?功能。因为 1 不等于 0,所以这个陈述是错误的,但是这个错误陈述不会被传递给 (not (is-even? (dec 1))?对于所有 n>0,他们会在这个过程中不断减少循环直到它们等于 0?
我觉得有些基本概念我不明白:(我真的很感谢所有的输入,希望能学到很多东西。
我不太确定我是否按照你的要求做了,但也许混淆来自他们为 (is-even? 2)
写出示例的方式,因为他们走了一条捷径,从 (not (is-even? 1))
直接到 (not false)
而不是执行上面 (is-even? 1)
已经显示的相同步骤,即它被视为 (not (is-even? (dec 1)))
即 (not (is-even? 0))
是 (not true)
-- 他们直接跳到 false
.
这是否阐明了示例的含义?如果没有,您能否尝试阐明您在示例中迷路的地方?
But I'm confused about why the recursion doesn't keep happening until
you are left with 0 every time.
确实如此。连续的评价是
(is-even? 2)
(not (is-even? 1))
(not (not (is-even? 0)))
(not (not true))
(not false)
true
对于任何正数 long
n
,我们得到 n
not
级联 (is-even? 0)
。
(is-even? 0)
的计算结果为 true
。
- 每两个
not
相互抵消。
- 所以,
- 如果
n
是偶数,我们就没有 not
了,函数求值
true
;否则,
- 如果
n
是奇数,我们还剩一个 not
,函数求值
(not true)
,即 false
.
我是初学者,真的很想理解所以请多多包涵。
我正在研究 Clojure Koans,但在理解递归方面遇到了一些麻烦。
我被这个问题困住了:Clojure Koans recursive is-even?
这是正确的函数:
(defn is-even? [n]
(if (= n 0)
true
(not (is-even? (dec n)))))
这些是给出的很好的例子:
(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
但我很困惑为什么递归不会继续发生,直到你每次都剩下 0。
例如,n=2。以下是我如何推理我脑海中发生的事情:2 不等于 0,那么 (not (is-even? 1)) 得到评估。当这个被评估时,1 被插入是偶数?功能。因为 1 不等于 0,所以这个陈述是错误的,但是这个错误陈述不会被传递给 (not (is-even? (dec 1))?对于所有 n>0,他们会在这个过程中不断减少循环直到它们等于 0?
我觉得有些基本概念我不明白:(我真的很感谢所有的输入,希望能学到很多东西。
我不太确定我是否按照你的要求做了,但也许混淆来自他们为 (is-even? 2)
写出示例的方式,因为他们走了一条捷径,从 (not (is-even? 1))
直接到 (not false)
而不是执行上面 (is-even? 1)
已经显示的相同步骤,即它被视为 (not (is-even? (dec 1)))
即 (not (is-even? 0))
是 (not true)
-- 他们直接跳到 false
.
这是否阐明了示例的含义?如果没有,您能否尝试阐明您在示例中迷路的地方?
But I'm confused about why the recursion doesn't keep happening until you are left with 0 every time.
确实如此。连续的评价是
(is-even? 2)
(not (is-even? 1))
(not (not (is-even? 0)))
(not (not true))
(not false)
true
对于任何正数 long
n
,我们得到 n
not
级联 (is-even? 0)
。
(is-even? 0)
的计算结果为true
。- 每两个
not
相互抵消。 - 所以,
- 如果
n
是偶数,我们就没有not
了,函数求值true
;否则, - 如果
n
是奇数,我们还剩一个not
,函数求值(not true)
,即false
.
- 如果