91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-07-02 10:08:20 來源:億速云 閱讀:128 作者:小新 欄目:編程語言

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

具體如下:

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

一.關于4.1節中遞歸在數組中的應用

1) 我們先來看看4.1節中的代碼實現,如下圖:

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

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

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

此時 n=arr.length=2:

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

2)現在我們對已經拆分的代碼進行分析為此來說明:遞歸函數的調用,本質就是函數調用。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二、關于4.2節中遞歸在鏈表中的應用(刪除鏈表中指定的所有元素值)

 1)我們先來看看4.2節中的代碼實現,如下圖:

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

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

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

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

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

第一次調用:

首先傳入頭結點為6的鏈表,由于不滿足遞歸的基本結束條件,再一次觸發第二次調用,此時鏈表變為頭結點為7的鏈表:

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

第二次調用:

此時鏈表的頭結點變為7,由于不滿足遞歸的基本結束條件,再一次觸發第三次調用,此時鏈表變為頭結點為8的鏈表:

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

第三次調用:

 此時鏈表的頭結點變為8,由于不滿足遞歸的基本結束條件,再一次觸發第四次調用,此時鏈表變為空鏈表:

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

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

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

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

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

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

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

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

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

 到此遞歸調用得以結束,完成過程如下:

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

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

以上是“Java遞歸運行機制的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨脱县| 孝义市| 泾阳县| 盘山县| 沭阳县| 密山市| 于田县| 崇州市| 登封市| 游戏| 渝北区| 乐清市| 建宁县| 阿图什市| 双牌县| 迁安市| 阜阳市| 报价| 兴化市| 嵩明县| 和平区| 杭锦旗| 聂拉木县| 始兴县| 汶川县| 商丘市| 来凤县| 阳西县| 东源县| 尼木县| 儋州市| 古田县| 梁山县| 灌南县| 万全县| 沂南县| 黔南| 仁化县| 霍林郭勒市| 临洮县| 黄冈市|