私は自分自身で clojure を学ぼうとしており、そうするために Prime Factors Kata と TDD の原則を使用しています。
次のような一連の Midje テストを介して:
(fact (primefactors 1) => (list))
(fact (primefactors 2) => (list 2))
(fact (primefactors 3) => (list 3))
(fact (primefactors 4) => (list 2 2))
次の関数を作成できました。
(defn primefactors
([n] (primefactors n 2))
([n candidate]
(cond (<= n 1) (list)
(= 0 (rem n candidate)) (conj (primefactors (/ n candidate)) candidate)
:else (primefactors n (inc candidate))
)
)
)
これは、次のエッジケーステストを投げるまではうまく機能します。
(fact (primefactors 1000001) => (list 101 9901))
スタック オーバーフロー エラーが発生します。これを適切な再帰ループに変える必要があることはわかっていますが、私が目にするすべての例は単純すぎて、焦点としてカウンターまたは数値変数のみを指しているようです。これを再帰的にするにはどうすればよいですか?
ありがとう!