日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python | 循環(huán)與遞歸的區(qū)別

 算法與編程之美 2021-01-22

根據(jù)面向?qū)ο蟪绦蛟O(shè)計的思想,對象包括屬性(數(shù)據(jù))和方法(操作)。其實,遞歸和循環(huán)就相當于兩種非常相似的操作,但是它們都有適合自己操作的數(shù)據(jù)??梢园岩粋€問題看作一個對象,問題由數(shù)據(jù)(問題沒有解決時的狀態(tài)或數(shù)據(jù)結(jié)構(gòu))和操作(把問題解決)組成。根據(jù)不同的數(shù)據(jù)(數(shù)據(jù)結(jié)構(gòu)——> 問題結(jié)構(gòu)),選擇相應(yīng)的操作,才是合適的選擇!

相同點:

  • 遞歸和循環(huán)的本質(zhì)都是代碼復(fù)用。

  • 遞歸和循環(huán)在理論上具有相同的計算能力(在可計算性理論中,這兩種計算模型所計算的函數(shù)類是相同的)。

  • 遞歸是一種特殊的循環(huán)。

不同點:

  • 程序獨立性

遞歸由程序和系統(tǒng)共同完成。遞歸需要系統(tǒng)維護一個系統(tǒng)工作棧。

循環(huán)由程序單獨完成。但是,循環(huán)需要程序設(shè)定好循環(huán)條件。

  • 程序規(guī)模

遞歸的規(guī)模很小,受到系統(tǒng)工作棧大小的限制。

循環(huán)的規(guī)模很大,幾乎不會受到限制。

VS2012中計算1+2+3+······+n

使用遞歸n只能達到4710.

使用循環(huán)n可以達到20 0000 0000.

  • 復(fù)用單位

遞歸的復(fù)用單位是函數(shù)。

循環(huán)的復(fù)用單位是語句(for循環(huán)語句或while循環(huán)語句)。

  • 解題方向

遞歸往往是自頂向下(1 <—— n),將問題的規(guī)模逐步縮小,直到縮小至遞歸結(jié)束條件成立(n == 1)。

循環(huán)既可以是自頂向下(1 <—— n),也可以是自底向上(1 ——> n),但是一般還是自底向上(1——> n)的比較多。

3.5.優(yōu)缺點

3.5.1遞歸的優(yōu)點:

代碼清晰簡潔,易于理解,可讀性強。

3.5.2遞歸的缺點:

運行效率低(函數(shù)調(diào)用需要參數(shù)入 棧和出棧);

對存儲空間的占用比循環(huán)多,因此受到問題規(guī)模和線程空間大小的限制,如果棧溢出,將導(dǎo)致系統(tǒng)崩潰;

不便于調(diào)試。

3.5.3循環(huán)的優(yōu)點:

運行效率高(不需要函數(shù)參數(shù)入棧和出棧);

對存儲空間占用比遞歸少,不需要系統(tǒng)維護工作棧;

便于調(diào)試。

3.5.4循環(huán)的缺點:

一重,二重,三重循環(huán)還能接受,四重以上循環(huán)的代碼就變得非常難看,可讀性很差。而且有的問題非常適合用遞歸,用循環(huán)實現(xiàn)非常難。

3.6適用場合

遞歸適合用在:

數(shù)據(jù)的結(jié)構(gòu)形式是按照遞歸定義的,比如單鏈表,二叉樹,斐波那契數(shù)列等;

數(shù)據(jù)的結(jié)構(gòu)形式不是按照遞歸定義的,但是用遞歸求解比用循環(huán)求解更加簡單,比如漢諾塔問題,四重及以上循環(huán)問題。

循環(huán)適合用在:

數(shù)據(jù)的結(jié)構(gòu)形式不是按照遞歸定義的,使用循環(huán)就能夠輕松解決的問題,比如一重循環(huán)、二重循環(huán)、三重循環(huán)。

由于循環(huán)具有運行效率高,便于調(diào)試等優(yōu)點,因此盡量使用循環(huán)。但是,當遇到如上面所示的兩種適合遞歸的問題或者循環(huán)很難解決的問題時,就要使用遞歸。雖然使用遞歸犧牲了運行效率和存儲空間,但是卻換來了更加清晰簡潔和易于理解的代碼,可讀性大大提高!

主編:王楠嵐

稿件來源:深度學(xué)習(xí)與文旅應(yīng)用實驗室(DLETA)

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多