通过Clojure的循环/重复传递序列时内存不足

时间:2011-09-25 07:10:35

标签: clojure primes tail-recursion out-of-memory

  

可能重复:
  Recursive function causing a stack overflow

我使用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的参数不存储在堆栈中。我该如何解决这个问题?

0 个答案:

没有答案