亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

瀏覽:58日期:2022-09-04 10:49:27

本文講述了Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解。分享給大家供大家參考,具體如下:

前言:在java遞歸基礎(chǔ)與遞歸的宏觀語意和java鏈表的天然遞歸結(jié)構(gòu)性質(zhì)中我們分別通過數(shù)組以及鏈表對遞歸進(jìn)行了應(yīng)用,那時(shí)我們只是對遞歸進(jìn)行了宏觀理解--遞歸是將問題化為更小問題的子過程。這一節(jié)我們對在4.1節(jié)中遞歸在數(shù)組中的應(yīng)用和4.2節(jié)中遞歸在鏈表中的應(yīng)用進(jìn)行微觀解讀:

一.關(guān)于4.1節(jié)中遞歸在數(shù)組中的應(yīng)用

1) 我們先來看看4.1節(jié)中的代碼實(shí)現(xiàn),如下圖:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

為了更好的進(jìn)行分析,我們將上述代碼的最后一句進(jìn)行拆分,拆分結(jié)果如下:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

此時(shí) n=arr.length=2:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

2)現(xiàn)在我們對已經(jīng)拆分的代碼進(jìn)行分析為此來說明:遞歸函數(shù)的調(diào)用,本質(zhì)就是函數(shù)調(diào)用。

為了分析簡單,我們使用只有兩個(gè)元素的數(shù)組 arr=[6,10]

第一次調(diào)用:sum(arr,0)

使用sun(arr,0)進(jìn)行調(diào)用,進(jìn)入方法體之后,由于不滿足遞歸的基本條件,進(jìn)而繼續(xù)調(diào)用sum(arr,1)方法,如下:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

第二次調(diào)用:sum(arr,1)

使用sun(arr,1)進(jìn)行調(diào)用,進(jìn)入方法體之后,由于不滿足遞歸的基本條件,進(jìn)而繼續(xù)調(diào)用sum(arr,2)方法,此時(shí)調(diào)用過程如下:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

當(dāng)調(diào)用sum(arr,2)時(shí),由于此時(shí)已經(jīng)滿足了遞歸的基本條件,結(jié)果直接返回0,回到上一次中斷的位置,也就是下圖中調(diào)用sum(arr,1) 方法中的sum(arr,l+1)處,如下圖:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

代碼從中斷處繼續(xù)向下執(zhí)行,返回arr[1]=10, x=0因此res=10,此時(shí)返回值為res=10;

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

此時(shí)代碼也將回到sum(arr,1)父親的調(diào)用中,也就是sum(arr,0)中。

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

代碼從中斷處繼續(xù)向下執(zhí)行,返回arr[0]=6, x=10因此res=16,此時(shí)返回值為res=16;

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

通過遞歸得到了我們最終的結(jié)果為16。

從上述的過程中印證了:遞歸函數(shù)的調(diào)用,本質(zhì)就是函數(shù)調(diào)用(自身函數(shù))---也就是使用不同的參數(shù),執(zhí)行相同的邏輯。

二、關(guān)于4.2節(jié)中遞歸在鏈表中的應(yīng)用(刪除鏈表中指定的所有元素值)

1)我們先來看看4.2節(jié)中的代碼實(shí)現(xiàn),如下圖:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

為了分析的方便,我們對方法體中的代碼做一個(gè)簡單的標(biāo)識1,2,3,結(jié)果如下圖:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

2)為了分析的簡便,我們來進(jìn)行模擬調(diào)用,對6--->7--->8--->null 刪除元素為7的節(jié)點(diǎn)。

注意:下面的分析中我們使用1,2,3這樣的編號,表示代碼執(zhí)行到的位置

第一次調(diào)用:

首先傳入頭結(jié)點(diǎn)為6的鏈表,由于不滿足遞歸的基本結(jié)束條件,再一次觸發(fā)第二次調(diào)用,此時(shí)鏈表變?yōu)轭^結(jié)點(diǎn)為7的鏈表:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

第二次調(diào)用:

此時(shí)鏈表的頭結(jié)點(diǎn)變?yōu)?,由于不滿足遞歸的基本結(jié)束條件,再一次觸發(fā)第三次調(diào)用,此時(shí)鏈表變?yōu)轭^結(jié)點(diǎn)為8的鏈表:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

第三次調(diào)用:

此時(shí)鏈表的頭結(jié)點(diǎn)變?yōu)?,由于不滿足遞歸的基本結(jié)束條件,再一次觸發(fā)第四次調(diào)用,此時(shí)鏈表變?yōu)榭真湵恚?/p>

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

第四次調(diào)用中,由于此時(shí)已經(jīng)滿足了遞歸的基本條件,回到上一次中斷的位置也就是2的位置,返回值為null,如下:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

此時(shí)的鏈表為頭結(jié)點(diǎn)為8的鏈表,如上圖黃色區(qū)域,執(zhí)行第三步代碼之后,返回的結(jié)果為為頭結(jié)點(diǎn)為8的鏈表,即為8-->null,并將該結(jié)果返回到上一步調(diào)用,也就是標(biāo)號為2的地方,得到結(jié)果為7-->8-->null的鏈表。

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

然后繼續(xù)執(zhí)行第三步,此時(shí)鏈表7-->8-->null滿足刪除條件,也就是head.val=val=7,將執(zhí)行head.next,返回最終結(jié)果為8-->null,如下:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

回到父級調(diào)用的中斷位置,得到的結(jié)果為6-->8--->null,然后執(zhí)行第三步代碼,判斷此時(shí)的鏈表的head.val是否等于val=7,此時(shí)的鏈表不滿足,直接返回head,也就是6--8-->null

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

到此遞歸調(diào)用得以結(jié)束,完成過程如下:

Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀圖文分析

遞歸的調(diào)用是由代價(jià)的:函數(shù)調(diào)用(時(shí)間開銷)+系統(tǒng)棧空間,但是使用遞歸書寫邏輯是更為簡單的。

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對大家java程序設(shè)計(jì)有所幫助。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 视频偷拍一级视频在线观看 | 日本特级aⅴ一级毛片 | 9999精品视频 | 亚洲国产欧美日韩一区二区三区 | 91三级视频 | 国产成人精品实拍在线 | 成年片人免费www | 高h喷水荡肉爽文np肉色文 | 日韩久草| 午夜精品成人毛片 | 免费妞干网 | 久草视频福利在线观看 | 国产++欧洲韩国野花视频 | xvideos视频国产chinese | 精品国产美女福到在线不卡f | 无夜精品久久久久久 | 欧美国产日本 | 久久精品国产免费观看99 | 一级午夜视频 | 国产欧美一区二区三区免费 | 网友自拍区一区二区三区 | 99久久精品免费国产一区二区三区 | 精品一区在线 | 黄色午夜影院 | 国产人成精品香港三级在 | 爱爱免费观看视频 | 亚洲色图图片区 | 国产第一区精品视频ai换脸 | 国产片黄色 | 国产成人一区二区精品非洲 | 尤物网在线观看 | 国产成人毛片视频不卡在线 | 国产一二在线观看视频网站 | 黄色一级欧美 | 天天干成人网 | 成人在线视频免费看 | 亚洲免费美女视频 | 免费不卡视频 | 国产美女精品在线 | 欧美福利一区二区三区 | 九九在线精品视频xxx |