確實,初學(xué)C的時候,漢諾塔的遞歸看起來確實是比較神奇的程序。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),玉龍企業(yè)網(wǎng)站建設(shè),玉龍品牌網(wǎng)站建設(shè),網(wǎng)站定制,玉龍網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,玉龍網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
其中主要就在hanoi 這個遞歸函數(shù),傳的參數(shù)里面有一個n 代表是幾層遞歸。
如果n=1 代表只有一個,move(one,three); 就是把第一個移到第三個就行了。否則
第一個柱子上有n個(n1) 要移到第三個。需要把上面的n-1個移到第二個,最下面的一個移到第三個,再把第二個柱子上的n-1個移到第三個。 要這三個步驟。
其中,第一個,和第三個步驟,和本身其實是一樣的。
就是把n-1個移到第二個,注意hanoi的參數(shù)
/* 定義hanoi函數(shù),將n個盤從one座借助two座,移到three座 */
two 即第二個參數(shù),這是表示用來借助的
就假設(shè)n=2 吧 hanoi(2,'A','B','C'); 變成了
hanoi(1,A,C,B); //這個代表A座上有一塊,需要借助C座,移到B座
A---C
hanoi(1,B,A,C); //這個代表B座上有一塊,需要借助A座,移到C座
最后會輸出
A--B
A--C
B--C
假設(shè)n=3 hanoi(3,'A','B','C');
hanoi(2,A,C,B); //這個代表A座上有兩塊,需要借助C座,移到B座
A---C
hanoi(2,B,A,C); //這個代表B座上有兩塊,需要借助A座,移到C座
A座上有兩塊,需要借助C座,移到B座 會輸出
A--C
A--B
C--B
B座上有兩塊,需要借助A座,移到C座 會輸出
B--A
B--C
A--C
1、打開VC6.0軟件,新建一個C語言的項目:
2、接下來編寫主程序,首先定義用來求階乘的遞歸函數(shù)以及主函數(shù)。在main函數(shù)里定義變量sum求和,調(diào)用遞歸函數(shù)fact(),并將返回值賦予sum,最后使用printf打印sum的結(jié)果,主程序就編寫完了:
3、最后運行程序,觀察輸出的結(jié)果。以上就是C語言使用遞歸求階乘的寫法:
相當(dāng)于循環(huán),要有判斷條件,傳遞進去的參數(shù)要變化,滿足條件調(diào)用自身,不滿足條件就開始一層一層返回。簡單例子:
int
f(int
i){
int
sum=0;
if(i0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}
沒有遞歸,你把自己想的太高端了
先執(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
是遞歸循環(huán)的錯誤: y= n + y( n - 1 );
上式是錯的!調(diào)用函數(shù)可以放到主函數(shù)后面,那沒關(guān)系的!我自己寫了一個程序,如下:
#includestdio.h
int total(int n)
{if(n==1)
return(1);
else
return(n+total(n-1));
}
main()
{int n,s;
scanf("%d",n);
s=total(n);
printf("sum(%d)=%d\n",n,s);
}
名稱欄目:c語言線程中調(diào)用遞歸函數(shù) c語言中函數(shù)的遞歸調(diào)用
文章URL:http://jinyejixie.com/article36/dodpisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、網(wǎng)站排名、微信公眾號、小程序開發(fā)、云服務(wù)器、移動網(wǎng)站建設(shè)
聲明:本網(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)