【发布时间】:2021-05-29 03:17:49
【问题描述】:
我是初学者,真的很想理解,所以请多多包涵。
我正在研究 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 被插入 is-even?功能。因为 1 不等于 0,所以这个陈述是错误的,但是这个错误陈述不会被传递给 (not (is-even? (dec 1))?对于所有 n>0,他们会在这个循环直到它们等于 0?
我觉得有一些我不明白的基本概念:(我非常感谢所有输入并希望学到很多东西。
【问题讨论】: