我正在学习 Clojure,我刚刚开始使用Project Euler,但遇到了一个我无法弄清楚的问题。这是我的代码:
(defn largest_prime_factor
[x]
(if (prime? x) x)
(loop [running x divider 2]
(if (= 0 (mod running divider))
(let [d (/ running divider)]
(if (prime? d)
d
(recur d 2)))
(recur x (inc divider)))))
(largest_prime_factor 12) ;works
(largest_prime_factor 49) ;works
(largest_prime_factor 147) ;Endless loop!
我意识到这可能不是找到最大素数的最有效方法,但我想弄清楚它为什么会陷入循环。显然我以错误的方式使用循环递归但我做错了什么?