當前位置:編程學習大全網 - 編程軟體 - 為什麽說遞歸效率低?

為什麽說遞歸效率低?

對於遞歸,有人提到了兩點:

(1)對棧的容量的壓力。

(2)個別問題的遞歸解法,其算法的低效性。

這兩個因素我簡短點評下,

(1)對棧的容量壓力:

通常遞歸的深度很大造成的。對於這壹點當然應該有程序員編碼時,來衡量和把握。win32 中壹個新建的線程,默認的棧通常在 1 MB 大小。那麽如果妳的遞歸函數,深度很大,顯然程序員應該對這種情況有預估,和對風險的避免。

這就和妳選擇,把內存分配在棧上還是堆上,會考慮到分配的內存大小的因素壹樣。

當然,如果在函數內分配很大的棧上空間,在函數體內定義壹個很大的數組,這樣不需要很深的深度,也會讓棧溢出。這當然也是程序員自己應該控制的。

(2)個別問題的遞歸解法,算法的低效。

這個低效主要在於這個問題的算法本身。而不是在遞歸這種方法上。比如說求斐波那契的某壹項,子問題會大量重復出現,會產生很多重復計算,這個是很多算法書上,是用來引導出動態規劃或者查表法的。

這主要是算法本身的效率問題,而不是遞歸的問題。這壹點是必須應該明確的。

(3)我們可以看到,在和樹有關的算法中,經常會有遞歸函數。

例如,遍歷文件夾,刪除註冊表的某壹個 key (及其所有子key)。

尤其對壹般樹的前序,後序遍歷,二叉樹的中序遍歷。

這主要原因是因為樹的定義,就是“遞歸性”的:

樹就是,某壹個節點有多個子節點,每個子節點是壹個樹。

我們再此可以看到,遞歸的顯著優點,是對解的描述的直觀性,代碼的簡潔性。

  • 上一篇:如何使用python編程寫壹個加法計算器
  • 下一篇:u盤寫保護怎麽辦?
  • copyright 2024編程學習大全網