У меня есть простой калькулятор простых чисел в clojure (неэффективный алгоритм, но я просто сейчас пытаюсь понять поведение повторения).Код:
(defn divisible [x,y] (= 0 (mod x y)))
(defn naive-primes [primes candidates]
(if (seq candidates)
(recur (conj primes (first candidates))
(remove (fn [x] (divisible x (first candidates))) candidates))
primes)
)
Это работает до тех пор, пока я не пытаюсь найти слишком много чисел.Например
(print (sort (naive-primes [] (range 2 2000))))
работает.Для чего-либо, требующего больше рекурсии, я получаю ошибку переполнения.
(print (sort (naive-primes [] (range 2 20000))))
не будет работать.В общем, то, что я использую recur или вызываю naive-primes снова без попытки TCO, не имеет никакого значения.Почему я получаю ошибки для больших рекурсий при использовании recur?