幫助大家理解一下遞迴函式的返回值

2021-07-14 14:41:43 字數 781 閱讀 4661

如題:

遞迴函式往往可以簡化我們的**,尤其是對樹的遍歷和利用回溯演算法寫**的時候,但是遞迴函式的返回值往往是困擾我們的。

總體來說,我們先要理解函式的呼叫過程,函式呼叫過程會用棧來儲存函式的返回值和過程,而遞迴函式就是呼叫自身函式的過程,所以也是用棧儲存,這樣就比較容易理解了。

下面一段**可以幫助大家理解遞迴函式的返回值。

1

package

test;23

4public

class

recursionvaluereturn

17else

1823

24 system.out.print(" "+i);

25return

i;2627}

2829

public

static

void

main(string args)

3637 }

下面是程式的輸出結果截圖.

由輸出和函式的返回結果可以看出,遞迴函式是用棧儲存函式返回值和中間過程,每次返回棧頂的結果(包括中間的輸出值和返回值),而遞迴函式最終的返回值的是棧底的值,也就是遞迴函式第一次呼叫時的返回值.

下面是壓入棧過程的示意圖。

帶大家簡單理解一下時間複雜度

時間複雜度 理論上,執行乙個演算法消耗的時間,是無法精確計算的,即使上機測試,收到各種因素影響,得到的時間也可能有較大差別。對於程式設計師,我們只需關注哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。針對執行時間,我們可以根據演算法執行的語句的次數,進行乙個簡單的衡量。理論上,乙個演算法中語...

遞迴函式原理技能包了解一下

最近在看一本書 演算法 然後剛好看到了遞迴,自以為很簡單的嘛,然後就 啪的打臉了。為啥原因被打臉呢?請看下面簡單的遞迴求陣列和的函式 function sum arr,value return value sum 1,2,3 0 如果執行以上 你會發現 最終結果返回了3。當時很是納悶?為什麼會產生這...

跟大家分享一下directUI的心得

original url 3.directui上的按鈕,滾動條,等等其他控制項都是自己一筆一劃畫出來的。看起來一筆一畫很複雜。說白了就是用各種畫線的函式,還有畫塊的函式綜合搭配起來實現我們想要的效果。gdi 為我們提供了一些效果的函式,比如漸變填充等等。其實我建議大家學習一下photoshop裡面的...