第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

遞歸函數(shù)導(dǎo)致堆棧溢出

遞歸函數(shù)導(dǎo)致堆棧溢出

小怪獸愛(ài)吃肉 2019-11-02 13:18:16
我正在嘗試編寫(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)?我想念什么?
查看完整描述

2 回答

?
www說(shuō)

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

您被filter的懶惰所打擊。更改(filter ...)為(doall (filter ...))您的recur表格,問(wèn)題應(yīng)消除。


更深入的解釋?zhuān)?/p>


調(diào)用會(huì)filter返回一個(gè)惰性序列,該序列將根據(jù)需要具體化已過(guò)濾序列的實(shí)際元素。如所寫(xiě),您的代碼會(huì)在...的filter基礎(chǔ)filter上堆疊filter,filter在每次迭代時(shí)再增加一層ing;在某個(gè)時(shí)候,它炸毀了。解決方案是在每次迭代時(shí)強(qiáng)制執(zhí)行整個(gè)結(jié)果,以便下一個(gè)迭代將對(duì)完全實(shí)現(xiàn)的seq進(jìn)行過(guò)濾,并返回完全實(shí)現(xiàn)的seq,而不是添加額外的惰性seq處理層。就是doall這樣。



查看完整回答
反對(duì) 回復(fù) 2019-11-02
  • 2 回答
  • 0 關(guān)注
  • 679 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)