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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸比循環(huán)更快嗎?

遞歸比循環(huán)更快嗎?

慕工程0101907 2019-07-29 10:15:12
遞歸比循環(huán)更快嗎?我知道遞歸有時比循環(huán)更清晰,而且我不會詢問何時應該使用遞歸迭代,我知道有很多問題已經(jīng)存在。我要問的是,遞歸是否比循環(huán)更快?對我來說,似乎總是能夠改進循環(huán)并讓它比遞歸函數(shù)更快地執(zhí)行,因為循環(huán)不會不斷地設置新的堆棧幀。我特別關注在遞歸是處理數(shù)據(jù)的正確方法的應用程序中遞歸是否更快,例如在一些排序函數(shù),二叉樹等中。
查看完整描述

3 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

這取決于使用的語言。你寫了'語言不可知',所以我舉一些例子。

在Java,C和Python中,與迭代(通常)相比,遞歸相當昂貴,因為它需要分配新的堆棧幀。在某些C編譯器中,可以使用編譯器標志來消除此開銷,這會將某些類型的遞歸(實際上是某些類型的尾調(diào)用)轉換為跳轉而不是函數(shù)調(diào)用。

在函數(shù)式編程語言實現(xiàn)中,有時,迭代可能非常昂貴,并且遞歸可能非常便宜。在許多情況下,遞歸轉換為簡單的跳轉,但是更改循環(huán)變量(這是可變的)有時需要一些相對繁重的操作,尤其是在支持多個執(zhí)行線程的實現(xiàn)上。由于mutator和垃圾收集器之間的交互,如果兩者可能同時運行,在某些環(huán)境中突變是昂貴的。

我知道在一些Scheme實現(xiàn)中,遞歸通常比循環(huán)更快。

簡而言之,答案取決于代碼和實現(xiàn)。使用您喜歡的任何風格。如果您使用的是函數(shù)式語言,則遞歸可能會更快。如果您使用命令式語言,迭代可能會更快。在某些環(huán)境中,這兩種方法都會導致生成相同的程序集(將其放入管道并對其進行抽吸)。

附錄:在某些環(huán)境中,最好的選擇既不是遞歸也不是迭代,而是高階函數(shù)。這些包括“map”,“filter”和“reduce”(也稱為“fold”)。這些不僅是首選樣式,不僅通常更清晰,而且在某些環(huán)境中,這些函數(shù)是第一個(或唯一)從自動并行化中獲得提升的功能 - 因此它們可以比迭代或遞歸快得多。Data Parallel Haskell就是這種環(huán)境的一個例子。

列表推導是另一種選擇,但這些通常只是迭代,遞歸或更高階函數(shù)的語法糖。


查看完整回答
反對 回復 2019-07-29
?
萬千封印

TA貢獻1891條經(jīng)驗 獲得超3個贊

如果替代方法是顯式管理堆棧,遞歸可能會更快,就像您提到的排序或二叉樹算法一樣。

我有一個案例,用Java重寫遞歸算法使它變慢。

因此,正確的方法是首先以最自然的方式編寫它,只有在分析顯示它是關鍵的時候進行優(yōu)化,然后測量所謂的改進。


查看完整回答
反對 回復 2019-07-29
  • 3 回答
  • 0 關注
  • 1973 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號