我想問例子階乘遞歸那道題
??
新手。。我的遞歸理解是褲子脫掉然后又穿上,這樣理解對嗎?
①就算自定義函數寫在main函數前面,程序還是從main開始執行嗎? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ②else if(n==0||n==1)這句里的n==0貌似根本不會有這種情況,他的意義是什么呢? ? ? ? ? ? ?③定義n=5,那么第一次是factorial(5-1)*5,4*5=20,這個結果存到哪里去了? ? ? ? ? ? ? ? ? ? ④運行到factorial(2-1)*2的時候,factorial(1)符合了else if(n==0||n==1)里面的n==1,執行result=1,下一步應該執行哪里呢?這時n=1,重新開始執行的話那就不是陷在else if了嗎,那么是怎么1*2*3....5的.
⑤還有。。if(n<0)這句好像也沒執行過。。。
我的廢話會不會太多了,希望大神針對我的12345順序回答,謝謝??!
2016-01-08
首先,執行的時候是先從main函數開始運行;其次第二和第五個問題其實是一樣的,因為你寫這個函數是要考慮到多方面的因素的,這里沒用到是因為在main函數中n = 5;如我把-1或者0賦值給n呢?這個時候就要通過以上的判斷了;最后,你沒有理解遞歸的過程,其實數學計算過程是發生在逆推的過程,就是從factorial(1)回到factorial(5),再好好看下課程最上面的那個圖
2016-01-08
沒有factorial(3-1)*2這一步啊,是factorial(2-1)*2,factorial(1) = 1,然后factorial(2) = factorial(1) * 2 =2,
然后factorial(3) = factorial(2) * 3 = 6;factorial(4) = factorial(3) * 4 = 24;factorial(5) = factorial(4) * 5 = 120;這樣一個過程