Java遞歸運行機制的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹Java遞歸運行機制的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

臨渭區(qū)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),臨渭區(qū)網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為臨渭區(qū)上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的臨渭區(qū)做網(wǎng)站的公司定做!

具體如下:

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

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

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

此時 n=arr.length=2:

Java遞歸運行機制的示例分析

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

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

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

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

Java遞歸運行機制的示例分析

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

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

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

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

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

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

第一次調(diào)用:

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

Java遞歸運行機制的示例分析

第二次調(diào)用:

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

Java遞歸運行機制的示例分析

第三次調(diào)用:

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

Java遞歸運行機制的示例分析

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

以上是“Java遞歸運行機制的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:Java遞歸運行機制的示例分析-創(chuàng)新互聯(lián)
路徑分享:http://muchs.cn/article36/dscpsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)ChatGPT、全網(wǎng)營銷推廣、移動網(wǎng)站建設(shè)品牌網(wǎng)站制作、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站