從主函數(shù)fun(6,x)開始調(diào)用。調(diào)用的時候,實參6和x將自身的值傳遞給形參n,s,接著,開始執(zhí)行fun函數(shù)體內(nèi)的語句第一次調(diào)用:判斷if(n==0||n==1),此時的n值為6,不滿足條件,執(zhí)行else部分語句。 fun(n-1,f1);fun(n-2,f2);先調(diào)用fun(n-1,f1);而fun(n-2,f2);需要當fun(n-1,f1);符合if條件以后才輪到它執(zhí)行第二次調(diào)用:此時,形參n=6轉(zhuǎn)變?yōu)閷崊,fun(n-1,f1)等價于fun(5,f1),繼續(xù)判斷,if(n==0||n==1),又不滿足條件,于是,重復之前的操作,轉(zhuǎn)向else部分執(zhí)行。 fun(n-1,f1);fun(n-2,f2);此時的n=5,同樣是先調(diào)用fun(n-1,f1);后面那個fun(n-2,f2);同樣處于等待狀態(tài),等待前面的 fun(n-1,f1);符合IF條件后才輪到它執(zhí)行,于是,fun(n-1,f1);就這樣一層一層執(zhí)行下去,每執(zhí)行一次,n的值減一,當n=1的時候,執(zhí)行if部分,這時,便可以在fun(n-1,f1);執(zhí)行完畢只有繼續(xù)執(zhí)行fun(n-2,f2);,接著,返回前一次調(diào)用的狀態(tài),開始執(zhí)行fun(n-2,f2);比如當n=2的時候,執(zhí)行完fun(2-1=1,f1)以后,便開始執(zhí)行fun(2-2=0,f2);和它后面的語句,最終,函數(shù)返回上一次調(diào)用的狀態(tài),即fun(3,f1);此時,fun(3,f1)已經(jīng)執(zhí)行完畢,因為之前我們已經(jīng)把fun(2,f1)執(zhí)行完了,接著,應(yīng)該執(zhí)行的是fun(3-2=1,f2);當這個函數(shù)最后終也符合if部分要求,又返回到前面的fun(4,f1),執(zhí)行完后,開始執(zhí)行fun(4,f2),這樣一個流程。通常來說,遞歸可以簡化代碼,但同時也會增加系統(tǒng)開銷并且讓程序閱讀的時候要比正常的順序程序難以理解一些。不過,現(xiàn)代的硬件飛速發(fā)展,用遞歸是完全可以的。
成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、邵東網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為邵東等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
我給你舉個簡單的例子你就明白了,你可以假設(shè)n=3
然后代入這個函數(shù),a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
滿意請采納
沒有遞歸,你把自己想的太高端了
先執(zhí)行fun(d)也就是fun(1)
d=5,d=d+p=5+1=6
打印了6
然后執(zhí)行fun(a+fun(d))=fun(3+6)=fun(9)
d=6,d=d+p=6+9=15
打印了15
最后打印fun(a+fun(d))
等于15
遞歸有一個堆棧的概念,那就意味著他是一個反理解的過程:就象數(shù)學遞推一樣,你知道第一項,第二項,又知道通項公式,那你就可以知道任何一項。
然后你看代碼:fun(0)==0,fun(1)==1;是告訴你一二項。
fun(n)==fun(n-1)+fun(n-2);是告訴你通項公式。那么,你就可以知道任何一項。你這樣理解就差不多了,具體機器是怎么操作的,那很復雜的,也不需要明白?。。?!