gpt4 book ai didi

clojure - 这里如何使用recur? [Clojure]

转载 作者:行者123 更新时间:2023-12-02 10:17:49 25 4
gpt4 key购买 nike

我以为我理解了 recur,但以下用法没有意义:

(fn gcd [a b] 
(if (= b 0)
a
(recur b (rem a b))))

该函数检索两个数字的最大公约数。对于 4 和 2,该函数将给出 2。

我知道 recur 可以绑定(bind)到函数,但我认为 'b' 只是在 recur 中循环,没有任何改变。您通常需要输入类似 a (inc b) 的内容来允许循环中的值发生变化。

我错过了什么?

最佳答案

这里的gcd函数使用Euclidean algorithm求两个数的最大公约数。

该函数工作并终止,因为参数列表包含 [a b],但为 b, (rem a b) 调用了 recur。请注意,b 的位置在这里发生了变化(从第二位变为第一位)。

a 的值发生更改,因为 b 的值已分配给它。此外,b 的值也会发生变化,因为 (rem a b) 被分配给它(从而减少)。因此,当重复调用时,两个值都会减小,最终其中一个值达到 0(停止递归)。

关于clojure - 这里如何使用recur? [Clojure],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com