最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年03月19日 08:22:06   作者:WFaceBoss  
這篇文章主要介紹了Java遞歸運(yùn)行的機(jī)制:遞歸的微觀解讀,結(jié)合圖文形式詳細(xì)分析了java遞歸運(yùn)行的原理、機(jī)制與相關(guān)注意事項,需要的朋友可以參考下

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

前言:在java遞歸基礎(chǔ)與遞歸的宏觀語意java鏈表的天然遞歸結(jié)構(gòu)性質(zhì)中我們分別通過數(shù)組以及鏈表對遞歸進(jìn)行了應(yīng)用,那時我們只是對遞歸進(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é)中的代碼實現(xiàn),如下圖:

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

 

此時 n=arr.length=2:

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

 為了分析簡單,我們使用只有兩個元素的數(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)方法,如下:

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

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

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

 

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

 

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

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

通過遞歸得到了我們最終的結(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),如下圖:

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

 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)用,此時鏈表變?yōu)轭^結(jié)點(diǎn)為7的鏈表:

第二次調(diào)用:

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

第三次調(diào)用:

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

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

 

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

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

 

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

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

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

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

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

相關(guān)文章

  • java——Byte類/包裝類的使用說明

    java——Byte類/包裝類的使用說明

    這篇文章主要介紹了java——Byte類/包裝類的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 詳解java NIO之Channel(通道)

    詳解java NIO之Channel(通道)

    這篇文章主要介紹了詳解java NIO之Channel(通道)的相關(guān)資料,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • maven如何在tomcat8中實現(xiàn)自動部署

    maven如何在tomcat8中實現(xiàn)自動部署

    本篇文章主要介紹了maven如何在tomcat8中實現(xiàn)自動部署,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java驗證碼生成具體代碼

    java驗證碼生成具體代碼

    這篇文章主要為大家分享了java驗證碼生成具體代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • java多線程的同步方法實例代碼

    java多線程的同步方法實例代碼

    這篇文章主要介紹了 java多線程的同步方法實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Springboot詳解底層啟動過程

    Springboot詳解底層啟動過程

    這篇文章主要介紹了SpringBoot啟動過程的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java實現(xiàn)學(xué)生信息管理界面

    Java實現(xiàn)學(xué)生信息管理界面

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)學(xué)生信息管理界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • springboot之自動裝配全過程

    springboot之自動裝配全過程

    這篇文章主要介紹了springboot之自動裝配全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java 將Excel轉(zhuǎn)為OFD格式(方法步驟)

    Java 將Excel轉(zhuǎn)為OFD格式(方法步驟)

    OFD是一種開放版式文檔是我國國家版式文檔格式標(biāo)準(zhǔn),本文通過Java后端程序代碼展示如何將Excel轉(zhuǎn)為OFD格式,分步驟給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2021-12-12
  • 超細(xì)講解Java調(diào)用python文件的幾種方式

    超細(xì)講解Java調(diào)用python文件的幾種方式

    有時候我們在寫java的時候需要調(diào)用python文件,下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用python文件的幾種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評論

龙江县| 马尔康县| 花莲县| 张家港市| 朝阳县| 五大连池市| 济源市| 新昌县| 开江县| 乌鲁木齐县| 宁乡县| 文水县| 临西县| 沛县| 滨海县| 唐河县| 合川市| 镇远县| 峨眉山市| 九寨沟县| 广南县| 鹤庆县| 武宣县| 阿勒泰市| 堆龙德庆县| 炉霍县| 扶绥县| 滨海县| 体育| 玉环县| 黄浦区| 观塘区| 嘉鱼县| 嘉善县| 武定县| 涡阳县| 玉龙| 北碚区| 宝山区| 丹巴县| 石狮市|