私は自分自身に教材を教えようとしており、プライムファクターのKataとTDDの原則を使用しています。このようなMidjeの一連のテスト経由プライムファクターを使用したClojureテール再帰
:
(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))
スタックオーバーフローエラーが発生します。私はこれを適切な反復ループに変える必要があることを知っていますが、私が見るすべての例はあまりにも単純すぎるようで、カウンタや数値変数に焦点を当てるだけです。これを再帰的にするにはどうすればよいですか?
ありがとうございます!
ワウ。 P –