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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本中文字幕不卡 | 色18美女社区 | 久久999 | 国产日韩精品一区二区 | 日本一级大毛片a一 | 欧美激情在线播放一区二区 | 老司机日日摸夜夜摸精品影院 | 欧美一级成人毛片影院 | 91精品久久一区二区三区 | 中文字幕一区二区在线观看 | 国产精品国产自线在线观看 | 99久久久 | 欧洲成人在线观看 | 开心激情五月婷婷 | 国产精品手机网站 | 精品久久久久久中文字幕一区 | 国产成人国产在线观看入口 | 亚洲va欧美va国产va天堂 | 久久99免费视频 | 国产精品中文字幕在线观看 | 精品黑人一区二区三区 | 玖玖成人网 | 天天干夜夜爽天天操夜夜爽视频 | 四虎影视免费观看免费观看 | 九九视频在线播放 | 国产乱码精品一区二区三区卡 | 成人欧美视频在线观看播放 | 亚洲综合色婷婷中文字幕 | 涩涩视频观看 | a毛毛片| 欧美高清在线视频在线99精品 | 久久99精品国产一区二区三区 | 国产丶欧美丶日韩丶不卡影视 | 免费二区| 在线观看国产精品日本不卡网 | 四虎影视院 | 顶级欧美色妇xxxxbbbb | 4虎影院永久地址www | 久久国产免费观看精品3 | 九九免费观看全部免费视频 | 亚洲一级在线观看 |