我正在处理clojure中的递归,我并不真正了解它。 我从here做了一个小程序,试图找到从1到20的所有数字可以分开的小数字。这是我编写的代码,但是肯定会有一些遗漏,因为它不起作用。 你能帮我一下吗?谢谢!clojure中的函数递归
(defn smallest [nume index]
(while(not (= index 0))
(do
(cond
(zero?(mod nume index))(let [dec' index] (smallest nume index))
:else (let [inc' nume] (smallest nume index))))))
编辑: 看起来是更好的loop/recur
,所以我试了一下:
(loop [nume 20
index 20]
(if (= index 0)
(println nume)
(if (zero?(mod nume index))
(recur nume (dec index))
(recur (inc nume) 20)))))
工作。如果您对结果感到好奇 - > 232792560
投资于理解循环/复发,不变性和标准库系列变换功能 - 'while'是势在必行的循环结构这在我的经验,一个从来没有使用超过一年一次或两次以上。 –
看来你是在黑暗中拍摄..例如,你认为'(索引20)'做了什么?而且,在“复发”中,价值的顺序很重要,我不确定你是否按照自己的想法去做。 – Shlomi
我刚刚编辑了关于订单的问题。我的意思是(索引20)'是将索引再次设置为20。 @shlomi – Capie