JAVASCRIPT 遞迴與迴圈的效率比較

2021-09-06 05:33:31 字數 1025 閱讀 5153

優點:**簡潔、清晰,並且容易驗證正確性。(如果你真的理解了演算法的話,否則你更暈)

缺點:它的執行需要較多次數的函式呼叫,如果呼叫層數比較深,需要增加額外的堆疊處理,比如引數傳遞需要壓棧等操作,會對執行效率有一定影響。但是,對於某些問題,如果不使用遞迴,那將是極端難看的**。

優點:速度快,結構簡單。

缺點:並不能解決所有的問題。有的問題適合使用遞迴而不是迴圈。如果使用迴圈並不困難的話,最好使用迴圈。

1. 一般遞迴呼叫可以處理的演算法,也通過迴圈去解決常需要額外的低效處理 。

2. 現在的編譯器在優化後,對於多次呼叫的函式處理會有非常好的效率優化,效率未必低於迴圈。

為了檢測這兩種演算法的效率,net小伙專門做了乙個測試,**如下:

注意:**中必須有四個事件變數;

測試結果如下:(表中紅色數字表示所需要的時間)

迴圈次數

迴圈

遞迴

1001

1100012

10000

5堆疊溢位

為什麼會出現堆疊溢位呢?

大家都知道遞迴的實現是通過呼叫函式本身,函式呼叫的時候,每次呼叫時要做位址儲存,引數傳遞等,這是通過乙個遞迴工作棧實現的。具體是每次呼叫函式本身要儲存的內容包括:區域性變數、形參、呼叫函式位址、返回值。那麼,如果遞迴呼叫n次,就要分配n*區域性變數、n*形參、n*呼叫函式位址、n*返回值。

當遞迴的次數太大的時候記憶體不足便會出現堆疊溢位的狀況了!

迴圈和遞迴根據具體情況使用!

迴圈與遞迴

優缺點 迴圈效率更高,遞迴容易理解 是大家普遍的觀點。儘管兩種想法在時間複雜度和空間複雜度上是等價的。但遞迴的有乙個弱勢 函式呼叫開銷如引數傳遞和堆疊之類的開銷,會導致在層次過深的時候,系統崩潰。遞迴是用棧機制實現的 c 每深入一層,都要占去一塊棧資料區域,對巢狀層數深的一些演算法,遞迴會力不從心,...

遞迴與迴圈

遞迴與迴圈 大一學c 的時候,老師說過遞迴與迴圈是可以相互轉化的,當時好像是用來兩重迴圈解決遞迴問題,演算法的複雜度依然是o n 最近發現可以通過模擬實現棧結構通過一重迴圈實現非遞迴演算法。遞迴必須滿足以下兩個條件 首先我們給出乙個最簡單的遞迴實現,演算法的目的是為了得到乙個大於等於10的數字。1 ...

遞迴與迴圈

記得參加某公司的筆試題,有一道題很簡單要求用遞迴方法,當時不太明白什麼是遞迴,刷刷用迴圈寫了出來,結果錯了.所以一定要搞清楚遞迴與迴圈的概念。遞迴 遞迴是乙個函式的內部呼叫這個函式自身 一定記住是呼叫自身的函式 迴圈 迴圈是通過設定計算的初始值及終止條件,在乙個範圍內重複運算 for,while等迴...