我正在處理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