我试图教自己clojure,我正在使用Prime因子卡塔和TDD的原则这样做。Clojure尾数递归与素因子
通过一系列的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))
我结束了堆栈溢出错误。我知道我需要把它变成适当的循环,但我所看到的所有例子似乎都过于简单化,只能指出计数器或数值变量作为焦点。我如何做这个递归?
谢谢!
哇。这是我第一次看到有人正在写Lisp,他们自己写了:P – 2013-11-28 22:42:33