黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解

Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解

更新時間:2020-04-13 16:38:53 來源:動力節(jié)點 瀏覽2422次


  棧


  提到方法的遞歸調(diào)用,需要先說一下棧的存儲概念。


  棧是一個先進后出的壓入(push)和彈出(pop)式數(shù)據(jù)存儲結(jié)構(gòu)。若想獲取到棧底的對象,就必須先將這個對象上面的所有的對象全部從棧中移除,否則無法獲取棧底的對象。


  我們來看看程序中棧是如何工作的,當(dāng)一個方法(調(diào)用者)調(diào)用另一個方法(被調(diào)用者)時,將會將調(diào)用者的參數(shù)和返回值一起壓入到棧中,此時調(diào)用者方法處于棧頂?shù)奈恢茫?dāng)調(diào)用者執(zhí)行到調(diào)用方法的語句時,此時調(diào)用者方法將不會繼續(xù)執(zhí)行,即將執(zhí)行被調(diào)用者方法,那么被調(diào)用者就會與參數(shù)返回值一起壓入到棧中,此時被調(diào)用者處于棧頂?shù)奈恢茫源藭r先執(zhí)行被調(diào)用者方法。直到被調(diào)用者方法執(zhí)行結(jié)束,所有的參數(shù)以及局部變量會隨著方法的執(zhí)行結(jié)束一起彈出棧空間,此時被調(diào)用者方法的返回值將會被帶出方法,數(shù)據(jù)不會隨著方法的出棧而消失,而是會落入到此時棧頂?shù)姆椒ㄖ校苑椒ǖ姆祷刂凳欠祷氐椒椒ǖ恼{(diào)用處


Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


  下圖是以上代碼執(zhí)行過程中,棧空間中存儲的變化:


Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


  方法的遞歸調(diào)用


  遞歸調(diào)用是一種特殊的嵌套調(diào)用,是某個方法直接或間接的調(diào)用自己,實際上相當(dāng)于是循環(huán)執(zhí)行功能代碼。換句話說,就是可以使用方法遞歸調(diào)用完成的功能,同樣也可以使用循環(huán)完成。


  方法遞歸調(diào)用的分類


  直接遞歸:現(xiàn)有fun方法,在fun方法中調(diào)用fun方法,這種調(diào)用方式稱為直接遞歸調(diào)用。


  間接遞歸:現(xiàn)有fun1方法和fun2方法,在fun1方法中調(diào)用fun2方法,在fun2方法中調(diào)用fun1方法,實際并沒有在fun1方法中直接調(diào)用自己,而是調(diào)用了fun2方法,間接的調(diào)用了fun1方法,這種調(diào)用方式稱為間接遞歸調(diào)用。


  遞歸調(diào)用的案例


  案例:設(shè)計一個方法,使用循環(huán)計算一個整數(shù)的階乘結(jié)果。


Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


  當(dāng)然,這個案例也可以使用方法的遞歸調(diào)用來完成,關(guān)于這個問題使用遞歸調(diào)用完成時,與數(shù)學(xué)中的一類題目類似:

  

Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


  上圖的數(shù)學(xué)問題,若想計算解集的話,需要將x的值帶入到表達(dá)式中,但是對于x的不同取值范圍,需要使用不同的表達(dá)式計算結(jié)果。對于這個數(shù)學(xué)問題的計算過程,再次我們就不在演示。


  若使用遞歸調(diào)用的方法計算一個整數(shù)的階乘結(jié)果時,我們已知n的階乘計算方法是從1開始乘一直乘到n為止,所以1的階乘結(jié)果是1。那么計算n的階乘,當(dāng)n>1時,n的階乘等于n乘n-1的階乘;當(dāng)n=1時,n的階乘等于1。通過分析,請我們可以使用分支結(jié)果完成分析過程中的:當(dāng)...則...,當(dāng)...則...


  我們可以將遞歸調(diào)用寫成一下格式的分段函數(shù):

  

Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


  遞歸調(diào)用中的返回值


  由于方法的返回值返回到方法的調(diào)用處,所以方法遞歸調(diào)用返回時是一層一層的向外返回。


  我們都玩過歡樂球,歡樂球中灌了水,再將歡樂球放進一個盛水的小玻璃缸中,小玻璃缸放進一個大玻璃缸中,將歡樂球中捅破時,歡樂球中的水一定是進入到小玻璃缸中,而不是直接進入大玻璃缸中。


  下圖是遞歸調(diào)用計算階乘的返回值的圖,返回值一定是一層一層向外返回,而不是最內(nèi)層的返回整個方法結(jié)束。


Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解


  方法壓棧與方法遞歸


  以上敘述我們說過,一個方法在執(zhí)行時,會壓入棧中,而遞歸調(diào)用相當(dāng)于多次調(diào)用同一個方法,那么遞歸幾次,就會在棧中開辟幾個相同大小的空間,所以使用遞歸調(diào)用時,比較好性能,我們可以通過循環(huán)來完成遞歸完成的功能。


 以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“Java基礎(chǔ)學(xué)習(xí):java方法的遞歸講解”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产精品亚洲欧美日韩区 | 国产欧美一区二区三区在线 | 日本精品一区二区三区在线观看 | 黄色片免费网站 | 18av黄动漫在线观看 | 日韩第一视频 | 伦理影院在线观看 | 国产成人亚洲精品91专区高清 | 制服美女视频一区 | 在线播放一区 | 成年人视频在线免费播放 | 国产亚洲情侣一区二区无 | 成年网在线观看免费观看网址 | 日韩欧美国产一区二区三区 | 国产精品香蕉在线一区二区 | 欧美太黄太色视频在线观看 | 永久在线免费观看 | 欧美成人亚洲 | 成αv人 | 主播蜜汁丝袜 精品自拍 | 九九全国免费视频 | 亚洲综合激情在线影院 | 你懂的免费在线视频 | 国产污污视频 | 国产成人ay手机在线观看 | 在线看一区二区 | 日韩在线视 | 天天摸夜夜添狠狠添2018 | 日韩黄色大片 | 国产在线精品一区免费香蕉 | 美日韩一级 | 簧片在线免费观看 | 日本韩国欧美三级 | 青青艹在线视频 | 你懂的中文字幕 | 黄色免费看视频 | 亚洲 欧美 日韩 综合 | 制服丝袜中文 | 国产精品麻豆一区二区三区v视界 | 在线观看精品视频网站www | 亚洲无线码一区在线观看 |