根據物件導向程式設計的思想,物件包括屬性(資料)和方法(操作)。其實,遞迴和迴圈就相當於兩種非常相似的操作,但是它們都有適合自己操作的資料。可以把乙個問題看作乙個物件,問題由資料(問題沒有解決時的狀態或資料結構)和操作(把問題解決)組成。根據不同的資料(資料結構——> 問題結構),選擇相應的操作,才是合適的選擇!
相同點:
不同點:
遞迴由程式和系統共同完成。遞迴需要系統維護乙個系統工作棧。
迴圈由程式單獨完成。但是,迴圈需要程式設定好迴圈條件。
遞迴的規模很小,受到系統工作棧大小的限制。
迴圈的規模很大,幾乎不會受到限制。
在vs2012中計算1+2+3+······+n
使用遞迴n只能達到4710.
使用迴圈n可以達到20 0000 0000.
遞迴的復用單位是函式。
迴圈的復用單位是語句(for迴圈語句或while迴圈語句)。
遞迴往往是自頂向下(1 <—— n),將問題的規模逐步縮小,直到縮小至遞迴結束條件成立(n == 1)。
迴圈既可以是自頂向下(1 <—— n),也可以是自底向上(1 ——> n),但是一般還是自底向上(1——> n)的比較多。
3.5.優缺點
3.5.1遞迴的優點:
**清晰簡潔,易於理解,可讀性強。
3.5.2遞迴的缺點:
執行效率低(函式呼叫需要引數入 棧和出棧);
對儲存空間的占用比迴圈多,因此受到問題規模和執行緒空間大小的限制,如果棧溢位,將導致系統崩潰;
不便於除錯。
3.5.3迴圈的優點:
執行效率高(不需要函式引數入棧和出棧);
對儲存空間占用比遞迴少,不需要系統維護工作棧;
便於除錯。
3.5.4迴圈的缺點:
一重,二重,三重迴圈還能接受,四重以上迴圈的**就變得非常難看,可讀性很差。而且有的問題非常適合用遞迴,用迴圈實現非常難。
3.6適用場合
遞迴適合用在:
資料的結構形式是按照遞迴定義的,比如單鏈表,二叉樹,斐波那契數列等;
資料的結構形式不是按照遞迴定義的,但是用遞迴求解比用迴圈求解更加簡單,比如漢諾塔問題,四重及以上迴圈問題。
迴圈適合用在:
資料的結構形式不是按照遞迴定義的,使用迴圈就能夠輕鬆解決的問題,比如一重迴圈、二重迴圈、三重迴圈。
由於迴圈具有執行效率高,便於除錯等優點,因此盡量使用迴圈。但是,當遇到如上面所示的兩種適合遞迴的問題或者迴圈很難解決的問題時,就要使用遞迴。雖然使用遞迴犧牲了執行效率和儲存空間,但是卻換來了更加清晰簡潔和易於理解的**,可讀性大大提高!
主編:王楠嵐
迴圈與遞迴的區別
迴圈與遞迴的區別 helloword 迴圈 迭代 與遞迴的區別 1。遞迴演算法與迭代演算法的設計思路區別在於 函式或演算法是否具備收斂性,當且僅當乙個演算法存在預期的收斂效果時,採用遞迴演算法才是可行的,否則,就不能使用遞迴演算法。當然,從理論上說,所有的遞迴函式都可以轉換為迭代函式,反之亦然,然而...
迴圈與遞迴的區別
迴圈 迭代 與遞迴的區別 1。遞迴演算法與迭代演算法的設計思路區別在於 函式或演算法是否具備收斂性,當且僅當乙個演算法存在預期的收斂效果時,採用遞迴演算法才是可行的,否則,就不能使用遞迴演算法。當然,從理論上說,所有的遞迴函式都可以轉換為迭代函式,反之亦然,然而代價通常都是比較高的。但從演算法結構來...
迴圈和遞迴的區別
對於遞迴和迴圈相比較 遞迴的 比較簡潔,容易讓別人理解,也容易讓自己理解,但是占用的空間非常大,有的時候在實現功能時,把所能用的空間全都用掉,可能還不夠,此時就會崩潰,而不進行任何操作,計算機不一定願意去實現,而且迴圈和遞迴實現同一功能時所用時間基本是沒有什麼差別的.解決問題方法的效率跟空間的利用效...