私は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!
これは最大の素因数を見つけるための最も効率的な方法ではないかもしれませんが、私が理解しようとしているのは、なぜそれがループに陥るのかということです。明らかに私はloop-recurを間違った方法で使用していますが、何が間違っているのでしょうか?