遞歸原理是否這樣?
就拿例題來說,我驗(yàn)證了一下過程,輸出結(jié)果是1,2,6,24,120
推測(cè)原理如下:
result=f(5)=5*f(4)----->120? ? ? ? ? ? ? ?
f(4)=4*f(3)----->24? ? ? ? ? ? ? ? ? ? ? ? ? ??
f(3)=3*f(2)----->6? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
f(2)=2*f(1)------>2? ? ? ? ? ? ? ? ? ? ? ? ? ??
f(1)=1*f(0)----->1? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
f(0)=0*f(-1) ?
f(-1)=?
遞減到f(-1),不是應(yīng)該輸出“輸出錯(cuò)誤嗎”,還有例題這樣編還不如n<=1,result=1呢?我這樣理解對(duì)嗎?求大神幫忙詳細(xì)解釋,謝謝!
2018-07-13
? ? 當(dāng)我們使用遞歸的時(shí)候,為了避免遞歸無限循環(huán)下去,往往需要設(shè)定一個(gè)邊界。以你的程序?yàn)槔?dāng)n==0或n==1時(shí),返回值已經(jīng)是一個(gè)常數(shù),而不是表達(dá)式或未知數(shù),因此沒有必要再去進(jìn)行遞歸【因?yàn)?和1的階乘都是1】,它會(huì)直接返回某個(gè)值【這里就是1】。所以n==0或n==1就是它的邊界,此時(shí)不會(huì)在去計(jì)算f(-1)的值。
? ? 寫成n<=1,result=1也是可行的,但是可讀性比較差,而且無形中擴(kuò)大了對(duì)n的判定條件,所以一般使用遞歸時(shí)會(huì)直接寫明n等于多少,而不是給出一個(gè)范圍。
2018-06-25
factorial(<0) = "輸出錯(cuò)誤"
factorial(0,1) = 1
factorial(2) = factorial(1)*2= 2
factorial(3) = factorial(2)*3= (1*2)*3
factorial(4) =?factorial(3)*4= (1*2*3)*4
factorial(5) =?factorial(4)*5= (1*2*3*4)*5