我正在嘗試編寫(xiě)一個(gè)簡(jiǎn)單的篩函數(shù)來(lái)計(jì)算Clojure中的素?cái)?shù)。我已經(jīng)看到了這個(gè)關(guān)于編寫(xiě)高效的篩分功能的問(wèn)題,但我不是為了那點(diǎn)呢。現(xiàn)在,我只是想編寫(xiě)一個(gè)非常簡(jiǎn)單(且緩慢)的篩子。這是我想出的:(defn sieve [potentials primes] (if-let [p (first potentials)] (recur (filter #(not= (mod % p) 0) potentials) (conj primes p)) primes))對(duì)于小范圍,它可以正常工作,但會(huì)導(dǎo)致大范圍的堆棧溢出:user=> (sieve (range 2 30) [])[2 3 5 7 11 13 17 19 23 29]user=> (sieve (range 2 15000) [])java.lang.StackOverflowError (NO_SOURCE_FILE:0)我以為通過(guò)使用recur它將是一個(gè)不消耗堆棧的循環(huán)結(jié)構(gòu)?我想念什么?
遞歸函數(shù)導(dǎo)致堆棧溢出
小怪獸愛(ài)吃肉
2019-11-02 13:18:16