大战熟女丰满人妻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中的遞歸算法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 2019年国产不卡在线刷新 | 日本囗交做爰视频欧美 | 日韩一区二区免费看 | 日本道在线视频 | 国产一区二区免费不卡在线播放 | 在线日产一区二区 | 成人欧美视频在线观看 | 国产一区二区三区高清视频 | 日韩高清在线二区 | 浮力影院欧美三级日本三级 | 97精品国产91久久久久久 | 日本一级毛片片在线播放 | 欧美一级毛片俄罗斯 | 中日韩一区二区三区 | 国产一区二区三区免费看 | 天天摸天天操天天干 | 国产高清在线精品一区免费97 | 欧美一级特黄乱妇高清视频 | 中文精品视频一区二区在线观看 | 欧美国产中文字幕 | 老司机精品在线观看 | 四虎成人欧美精品在永久在线 | 欧美国产综合日韩一区二区 | 久久精品成人国产午夜 | 色五月天天 | 一级片播放 | 欧日韩不卡在线视频 | 久草视频大全 | 很黄很色的免费视频 | 波多野结衣av1区2区3区 | www.亚洲一区二区三区 | 台湾成人性视频免费播放 | 一级毛片特级毛片免费的 | 大尺度毛片| 精品一区二区三区免费视频 | 国产成人在线播放视频 | 欧美αv| 视频精品一区二区三区 | 日韩一区二区不卡 | 青草青在线免费视频 | 欧美巨大video粗暴 |