Java 遞迴詳解

2021-08-18 20:42:28 字數 1446 閱讀 8807

遞迴詳解:

1.遞迴一句話通俗講就是乙個方法自動重複呼叫自己的過程。

2.因為是重複呼叫自己了,所以看起來像乙個迴圈,所以為了避免記憶體溢位系統崩潰,我們需要在方法裡加乙個返回值判斷,用於遞迴迴圈的跳出。

下面用debug模式解釋一下遞迴的實現原理:

首先是原始碼:

public class demo8   

/**

* @param 求和方法

*/

public static int sum(int num)

return num + sum(num+1);

} }

我們在**第5行呼叫sum實現求和1到100的值

在**中11、12行是跳出遞迴的if,跳出的值是100。

**中第14行就是遞迴的實現寫法。

現在我們用debug模式分析一下:

第一步:

首先我們執行了debug除錯,在debug中可以看到已經呼叫例項了乙個sum的方法,可以在右邊value中看到方法裡的引數值正是我們輸入的1。現在進入到方法內部正執行到if判斷中,由於num值不是100,所以沒有執行if裡的return 100; 程式將繼續向下執行。

第二步:

我們可以看到**裡的第14行引數值 1 已經儲存在num裡,**將繼續執行到sum(num+1),我們將目光在看到上面debug除錯框裡可以看到又建立了乙個sum方法,我們將目光看到右邊value裡的值是2,那是因為num裡的值自增+1的結果.所以當前num 的值等於2並且儲存到第二個sum方法裡的num裡。

那麼可以繼續思考下去,後面繼續是第二個sum方法裡將會建立第三個sum方法,第三個sum方法裡將會建立第四個sum方法,建立後自增的值都會儲存到當前sum方法裡的int num裡。

讓我們來看一下**效果:

最終執行到100次後,if會將100的值返回,方法就不會繼續執行到第14行,所以就不會在建立新的sum方法了。遞迴也就跳出了。讓我們看一下**:

我們可以看到當num裡的值自增到100以後,if方法執行了,返回了乙個100的值遞迴被直接跳出了,那麼後續**在執行什麼呢?後續**將繼續執行每乙個sum方法裡的num值的相加,你也可以清楚的看到每乙個被例項的sum方法被消除。直到全部相加完畢。最終的值我們可也可以在value裡或者控制台裡看到是5050。

java 遞迴詳解

example 求5的階乘。如下 public class test public static void main string args 上面的multiply是乙個階乘的例子。其實遞迴遞迴,從字面上解釋就是在方法本身呼叫自己的方法,或者間接呼叫 看上面的程式,拿multiply 5 來說 n ...

Java 全排列 遞迴 詳解

一 比如對1 2 3 全排列 1 2 3 1 3 2 2 1 3 2 3 1 3 2 1 3 1 2 以遞迴的思想來看 1.對於0號位置元素,分別是1 2 3 實現方法 將原有的0號元素分別於0,1,2號元素交換。2.除0號位置元素外,對剩下的子串行進行全排列,按照1,2步驟進行。4.當子串行只有個...

java 遞迴呼叫

遞迴呼叫是呼叫自身的函式,並傳給自身的相應的引數,這一運算過程是一層層的進行的,直到滿足一定條件時,才停止呼叫。遞迴函式的特點 1.函式要直接或間接呼叫自身。2.要有遞迴終止條件檢查,即遞迴終止的條件被滿足後,則不再呼叫自身函式。3.如果不滿足遞迴終止的條件,則呼叫涉及遞迴呼叫的表示式 在呼叫函式自...