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)知道遞迴函式裡面的引數為0時,不再遞迴,才一步一步返回相乘的結果,畫圖更為直觀: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
順便一提,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就遞迴...