大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java基礎學習:java中的遞歸算法

Java基礎學習:java中的遞歸算法

更新時間:2020-04-24 14:15:18 來源:動力節點 瀏覽4280次

    遞歸是工作中經常會使用到的一種算法,比如階乘的計算就是利用遞歸來實現的,如果您還沒有接觸編程方面的內容,要理解遞歸其實并不困難,它就是在一個函數的內部調用了本身,執行的情況特別類似是一個循環,如果要這么說遞歸似乎沒有什么好說的,但是在這里我希望和大家討論的是遞歸這種算法在使用的時候對系統性能的影響,同時也會和大家分析下在遞歸函數執行過程中內存的變化情況。

    特別提醒,在下述內容中方法和函數是同一個意思。

    遞歸的實現

    為了讓大家更好的理解接下來介紹的內容,同時也為了照顧那些并沒有了解過遞歸的讀者,這里我們先來為搭建演示下在Java中到底如何通過遞歸來實現階乘計算的:

Java基礎學習:java中的遞歸算法

    對于上述這段代碼來說,開發人員并不陌生,這也是階乘最簡單的例子,大家可以看到在階乘運算函數factorial()中,如果傳入的參數大于1的話,就會進行一次乘法運算,通過斷點調試理解這個過程并不困難,但是在這里想和大家討論的是在這個階乘運算過程中,系統的內存是如何變化的呢?在上一篇文章中和大家提到過,在系統運行過程中函數參數以及其中的變量都會存放在棧中,那么像這種重復調用自己的函數它的棧是如何變化的呢?通過研究這種變化,就可以知道這種算法在工作中對系統的性能有多大的影響,這是一個值得所有開發人員思考的問題。

    遞歸的分析

    要研究清楚剛才的問題,我們必須先清楚在程序運行過程中,如果一個函數調用了另外一個函數,那么接下來會發生怎樣的情況?這里設置了這樣一段代碼,就是當數值小于10的時候,加上1輸出,如果大于10的話,需要先減去10,再加上1輸出(當然,這段代碼沒有任何作用,純粹是為了制造一個這樣的場景),在Java中可以用如下的方法實現:

Java基礎學習:java中的遞歸算法

    我們可以看到,在這段代碼中,add中調用了另外一個方法sub,但是這時候add方法并沒有結束,所以在程序中應該存在兩個棧,分別是存儲sub、add兩個方法中內容的,也就是如下情況:

Java基礎學習:java中的遞歸算法

    為什么sub對應的棧會在add上邊呢?這是因為棧是后進先出的,因為sub方法在add方法之后執行,所以sub對應的棧應該在add上邊,當sub方法執行完畢之后,系統自動銷毀這塊空間,重新又回到了add方法中,最后當程序結束的時候add方法對應的空間也會被銷毀,其中的變量、參數也會隨著被消失,為了方便大家理解這個過程,這里準備了一張過程圖:

Java基礎學習:java中的遞歸算法

    到這里為止,我們知道了在一個函數中運行另外一個函數,會在內存中為這個函數開辟一塊空間,當這個函數執行完畢之后,這塊空間會被計算機銷毀,重新回到之前的函數中,也就是說在此之前,運行的這個函數占據的空間一直存在,明白這個道理之后,我們再次回到剛開始的遞歸算法中。假設我們現在要計算3的階乘,那么在整個過程中,內存的變化就可以這樣表示:

Java基礎學習:java中的遞歸算法

    很顯然,隨著我們傳入的參數越來越大,整個過程會越來越復雜,而每次調用遞歸函數調用自身之后,都會在計算機中開辟一塊新的空間,這說明使用此種方法對系統的性能會有一定的影響,特別是當我們遞歸執行的次數很多的時候,特別容易造成系統崩潰。

 以上就是動力節點java培訓機構的小編針對“Java基礎學習:java中的遞歸算法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美激情一区二区三级高清视频 | 天天干天天插天天射 | 欧美成综合网网站 | 精品玖玖玖视频在线观看 | 911视频免费版 | 欧美草逼视频 | 91精品国产色综合久久不卡蜜 | 99热在线这里只有精品 | 人人狠狠综合久久亚洲88 | 2021国产精品久久 | 国产成人精品亚洲日本在线 | 国产成人亚洲毛片 | 欧美人一级淫片a免费播放 欧美人与zoxxxx另类9 | 99精品视频在线免费观看 | 91热在线观看精品 | 欧美污视频网站 | 亚洲999| 国产欧美精品一区二区三区 | 中国国产一国产一级毛片视频 | 亚洲欧洲日产国码久在线观看 | 成人性色生活片免费看爆迷你毛片 | 毛片网站大全 | 色综合天天综合给合国产 | 99视频在线永久免费观看 | 久久666| 婷婷激情综合网 | 亚洲伊人精品综合在合线 | 另类图片综合 | 欧美人一级淫片a免费播放 欧美人与zoxxxx另类9 | 国产一区 在线视频 | 四月婷婷七月婷婷综合 | 色婷婷视频 | 久草视屏 | 久久综合干 | 国产精品入口牛牛影视 | 成人欧美一区在线视频在线观看 | 国产成人不卡 | 日韩xoxo视频在线观看 | 中文字幕在线精品视频万部 | 中文字幕亚洲一区二区va在线 | 国产精品爱久久久久久久小 |