理解 簡單的遞迴實現階乘過程中的引數傳遞

2021-10-22 16:24:43 字數 679 閱讀 8575

def

factorial

(n):

if n==0:

return

1if n>=1:

return n*factorial(n-1)

print

(factorial(4)

)

雖然這是一段很簡單的**,不過從前學習的時候經常對每一步的變化繞不過彎來,這次好好整理一下思路。

剛開始,我以為返回值直接就是4* 3* 2*1,但仔細一想,迴圈應該才這樣吧,factorial(n-1)哪去了?實際上過程是這樣的:

4!的遞迴呼叫過程:

4* factorial(3)

4* 3* factorial(2)

4* 32 factorial(1)

4* 3* 2* 1* factorial(0)

4* 3* 2* 1* 1

4* 3* 2* 1

4* 3* 2

4* 6

24

知道遞迴函式裡面的引數為0時,不再遞迴,才一步一步返回相乘的結果,畫圖更為直觀:

順便一提,notablity的筆記變功能真是太雞肋了

遞迴求階乘的簡單原理

方法自身呼叫身就是遞迴。但是,遞迴演算法很耗費棧記憶體,可以不用的時候盡量別用。遞迴必須有結束條件,否則會發生棧記憶體溢位錯誤 即使有了結束條件,也可能發生棧記憶體溢位錯誤,因為遞迴太深了。在jvm記憶體劃分上有三塊主要的記憶體空間 當類載入的時候,方法 函式 片段儲存在方法區中 片段雖然在方法區記...

對遞迴過程的理解

引入一道經典的遞迴問題 展示 include include 引入演算法庫 intmaxsum int i,int j using namespace std int n 定義總行數 const int index 100 int a 100 100 intmain cout maxsum 1 1 ...

對遞迴的簡單理解

今天一小夥伴寫了乙個遞迴,echo可以輸出要取的值,return的卻總是null,寫了乙個簡單的測試復原一下問題。function test i echo i return i a test 30 var dump a 結果如下 261014182226 int 26 思路看上去很簡單,i 3就遞迴...