千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 計算機在執(zhí)行遞歸算法時效率低的原因是什么?

計算機在執(zhí)行遞歸算法時效率低的原因是什么?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-11 08:06:13 1696982773

一、計算機在執(zhí)行遞歸算法時效率低的原因

計算機在執(zhí)行遞歸算法時效率低的原因是函數(shù)調(diào)用的開銷導(dǎo)致的。在一個函數(shù)調(diào)用之前需要做許多工作,比如準(zhǔn)備函數(shù)內(nèi)局部變量使用的空間、搞定函數(shù)的參數(shù)等等。

這些事情每次調(diào)用函數(shù)都需要做,因此會產(chǎn)生額外開銷導(dǎo)致遞歸效率偏低,所以邏輯上開銷一致時遞歸的額外開銷會多一些

當(dāng)然了,通過有意識的組織代碼的寫法可以把某些遞歸寫成尾遞歸,尾遞歸可以進行特殊的優(yōu)化所以效率會比普通的遞歸高一些,也不會因為遞歸太多導(dǎo)致棧溢出。

遍歷樹還不用遞歸的話,那么人肉寫一個棧+深度優(yōu)先遍歷或者人肉隊列+廣度優(yōu)先遍歷,再輔以黑魔法給?;蛘哧犃刑崴?,應(yīng)該會比遞歸快一些,加速幅度和語言和寫法相關(guān),但在大多數(shù)情況下我覺得是得不償失的,花了很大精力很可能效率提升不明顯。

但是,如果能轉(zhuǎn)化為尾遞歸形式,并且你所使用的語言的編譯器具有對尾遞歸的優(yōu)化,那么尾遞歸的效率應(yīng)該至少應(yīng)該和循環(huán)一樣好。當(dāng)然,Java的編譯器一般來說是不會對尾遞歸做優(yōu)化的。第二,對于有些不能轉(zhuǎn)化為尾遞歸形式的遞歸,即使你寫成了循環(huán)的形式,其實也基本上是在拿個棧來模擬遞歸的過程??赡軙硪欢ǖ男侍嵘峭鶗斐纱a的冗余。從開發(fā)效率角度來考慮,除非性能實在達不到要求,否則還是建議使用遞歸的方式。

延伸閱讀:

二、遞歸算法是什么

遞歸算法(英語:recursion algorithm)在計算機科學(xué)中是指一種通過重復(fù)將問題分解為同類的子問題而解決問題的方法。遞歸式方法可以被用于解決很多的計算機科學(xué)問題,因此它是計算機科學(xué)中十分重要的一個概念。絕大多數(shù)編程語言支持函數(shù)的自調(diào)用,在這些語言中函數(shù)可以通過調(diào)用自身來進行遞歸。計算理論可以證明遞歸的作用可以完全取代循環(huán),因此在很多函數(shù)編程語言(如Scheme)中習(xí)慣用遞歸來實現(xiàn)循環(huán)。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
C語言中List是什么?

一、C語言中的List在C語言中,“List”是一個抽象的數(shù)據(jù)類型,表示一組有序的數(shù)據(jù)元素。List可以實現(xiàn)各種數(shù)據(jù)結(jié)構(gòu),如鏈表、數(shù)組、棧和隊列等,...詳情>>

2023-10-11 09:36:59
C數(shù)據(jù)結(jié)構(gòu)與算法是什么?

一、C數(shù)據(jù)結(jié)構(gòu)與算法C數(shù)據(jù)結(jié)構(gòu)就是指一組數(shù)據(jù)的存儲結(jié)構(gòu)。算法就是操作數(shù)據(jù)的一組方法。數(shù)據(jù)結(jié)構(gòu)和算法是相輔相成的。數(shù)據(jù)結(jié)構(gòu)是為算法服務(wù)的,...詳情>>

2023-10-11 09:30:58
什么是樹的特殊類問題?

一、什么是樹的特殊類問題1、二叉樹的特殊類問題二叉樹是一種特殊的樹結(jié)構(gòu),每個節(jié)點非常多只能有兩個子節(jié)點。二叉樹的特殊類問題包括二叉樹的...詳情>>

2023-10-11 09:24:55
數(shù)據(jù)結(jié)構(gòu)里的間界疊加是什么意思?

一、數(shù)據(jù)結(jié)構(gòu)里的間界疊加數(shù)據(jù)結(jié)構(gòu)里的間界疊加是間界疊加:從一端到另一端沿各部分分界來回折疊后,最后一位對齊相加。如:key=2534635870三位...詳情>>

2023-10-11 09:22:37
軟件架構(gòu)如何能夠滿足ASPICE流程?

一、軟件架構(gòu)如何能夠滿足ASPICE流程架構(gòu)的用途是把整個產(chǎn)品劃分為更為細節(jié)的板塊:軟件、硬件、通信等。在這個基礎(chǔ)上軟件整體將按照用途、功能...詳情>>

2023-10-11 08:47:00