我使用Sieve of Eratosthenes写了一个函数来计算给定自然数下的所有素数。它返回整个素数序列。
(defn primes-below [n]
(loop [primes [] source (range 2 n)]
(if (empty? source)
primes
(recur
(conj primes (first source))
(filter #(not (= (rem % (first source)) 0)) source)))))
它的工作正常,直到n的大小为10000.但是,在n = 100000时,它会导致Out of Memory异常。这是为什么?我认为loop / recur的参数不存储在堆栈中。我该如何解决这个问题?