我給你舉個簡單的例子你就明白了,你可以假設(shè)n=3
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比湘橋網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式湘橋網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋湘橋地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
然后代入這個函數(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
滿意請采納
#include?"stdio.h"
void?fun1(int?n,int?m){
if(m0)
fun1(n,m-1);
printf("%-2d+%2d?=?%-2d?",n,m,n+m);
}
void?fun2(int?n,int?m){
if(n0)
fun2(n-1,m);
fun1(n,m-n);
printf("\n");
}
int?main(int?argv,char?*argc[]){
int?N;
printf("Input?N(int?0=N=99)...\nN=");
if(scanf("%d",N)!=1?||?N0?||?N99){
printf("Input?error,?exit...\n");
return?0;
}
fun2(N,N);
return?0;?
}
運行樣例:
遞歸有一個堆棧的概念,那就意味著他是一個反理解的過程:就象數(shù)學遞推一樣,你知道第一項,第二項,又知道通項公式,那你就可以知道任何一項。
然后你看代碼:fun(0)==0,fun(1)==1;是告訴你一二項。
fun(n)==fun(n-1)+fun(n-2);是告訴你通項公式。那么,你就可以知道任何一項。你這樣理解就差不多了,具體機器是怎么操作的,那很復雜的,也不需要明白!!!!
從主函數(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í)行完了,接著,應該執(zhí)行的是fun(3-2=1,f2);當這個函數(shù)最后終也符合if部分要求,又返回到前面的fun(4,f1),執(zhí)行完后,開始執(zhí)行fun(4,f2),這樣一個流程。通常來說,遞歸可以簡化代碼,但同時也會增加系統(tǒng)開銷并且讓程序閱讀的時候要比正常的順序程序難以理解一些。不過,現(xiàn)代的硬件飛速發(fā)展,用遞歸是完全可以的。
這個很好理解啊,你看看你輸入的參數(shù)什么就可以了。
你函數(shù)的聲明是void fuck ( int n ,char o, char t, char th)
第一次調(diào)用你是fuck ( n, 'A','B','C');這時,o=A,t=B,th=C,所以輸入
printf ("%c %c %c\n",t,o,th);就是BAC,
然后你fuck(n-1,t,o,th);,這時o=原來的t=B,t=原來的o=A,th=C,輸出
printf ("%c %c %c\n",t,o,th);就是ABC了如此類推
第一級遞歸:n=483,i=n/10=48≠0
注意此時先遞歸調(diào)用convert(48),待遞歸返回再輸出當前n的個位數(shù)字n%10=3
第二級遞歸:n=48,i=n/10=4≠0
此時繼續(xù)遞歸調(diào)用convert(4),待遞歸返回再輸出當前n的個位數(shù)字n%10=8
第三級遞歸:n=4,i=n/10=0
此時遞歸終止,先輸出當前n的個位數(shù)字n%10=4
再返回上一級遞歸輸出8,最后返回第一級遞歸輸出3
因此最終輸出為:4 8 3
分享文章:c語言實現(xiàn)遞歸函數(shù)調(diào)用 c語言遞歸函數(shù)調(diào)用圖
本文來源:http://chinadenli.net/article32/hgospc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、手機網(wǎng)站建設(shè)、網(wǎng)站收錄、電子商務(wù)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)