2014-10-19 106 views
-2

使用嵌套循環或遞歸函數的輸出有什麼區別?在考慮條件時,哪種方法最適合生成組合?嵌套循環和遞歸函數有什麼區別?

+0

這取決於您要解決的具體問題。你不會一直使用一個而不是其他的。注意「[瞭解遞歸](http://stackoverflow.com/questions/717725/understanding-recursion)」 – 2014-10-19 17:11:49

回答

1

遞歸算法從同一個函數(遞歸)中調用一個函數。是否執行遞歸是基於某種條件。

function foo() 
    { 
      ?/ do work 
      if(condition) 
        foo(); 
    } 

迭代算法通常會調用函數一些次數(n)。

function foo() 
    {} 

    for(int i = 0; i < n; i++) 
      foo(); 

遞歸函數時需要重複操作某些數據塊和的是否重複的條件是依賴於前一個操作,通常使用。在數學中計算一個截斷的無窮級數就是一個例子。

當條件不依賴於以前的操作時,通常會使用迭代函數。反轉矩陣具有預定義的n。

這兩種方法都可以用於大多數目的,但您通常會發現在特定情況下一種方法比另一種方法更容易。

儘管有遞歸的意識,但仍然存在調用堆棧溢出。如果可以保證算法會收斂並在一定數量的遞歸內結束,最好只使用它。

0

遞歸和迭代(循環)是一般意義上不可比較的不同策略。對於某些算法,您可能同時具有迭代和遞歸版本(例如階乘或斐波那契數字),對於其他算法,其中一個可能比另一個更直觀(例如遞歸樹行走)。

無論算法遵循何種策略,輸出必須相同,否則您將實現不同的算法。

底線,它真的取決於你將使用什麼算法。

1

遞歸可以被看作是「做」循環的另一種方式。主要優點是代碼可讀性,正如你在這個Stackoverflow question中看到的,在這種情況下,當有很多嵌套循環時。

但要小心,因爲Python(1000)有一個小的遞歸限制。您可以通過鍵入

>>>import sys 
>>>print sys.getrecursionlimit() 
1000 

對於遞歸的其他案件VS循環的概述驗證,檢查this pdf。但是,如this Stackoverflow answer中所述,您應該堅持Python的純迭代方案。