c語言漢諾塔函數(shù)調(diào)用 用c語言實(shí)現(xiàn)漢諾塔

c語言 漢諾塔 函數(shù)遞歸調(diào)用

首先我們要了解這個(gè)游戲,漢諾塔問題,源于印度一個(gè)古老傳說。大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動(dòng)一個(gè)圓盤。

寬城ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

先將A -- C,再將A -- B,因?yàn)闈h諾塔是下面的圓盤(第二個(gè))比上面的大(第一個(gè)),所以我們不能直接放在第三根柱子即A上,緊接著當(dāng)我們想要移動(dòng)第三個(gè)圓盤di時(shí)已經(jīng)沒有柱子了,所以我們先將C柱上的圓盤給B,再將A柱上的圓盤給C即A -- C,此時(shí)C上是第三大的圓盤,B上從上到下依此是第一個(gè)和第二個(gè)盤子,然后再將B -- A(最小號盤子給A),然后B -- C(第二大的盤子給C),再將最小盤子給C即A -- C,這是實(shí)現(xiàn)前三個(gè)盤子放置方法。

建議你找個(gè)小游戲玩一下,一邊玩一邊理解。

c語言遞歸調(diào)用漢諾塔

首先調(diào)用 hanoi(3,a,b,c)

判斷 “3”是否為“1”

不為“1”

{

{ 調(diào)用 hanoi(n-1, one, three, two),即hanoi(2,a,c,b)

執(zhí)行hanoi(2,a,c,b),此時(shí) one = a,two = c,thtee = b;

判斷 “2”是否為“1”,不為1

調(diào)用 hanoi(n-1, one, three, two),即hanoi(1,a,b,c)

執(zhí)行hanoi(1,a,b,c),此時(shí) one = a,two = b,thtee = c;

判斷 “1”是否為“1”,為1,執(zhí)行move(one, three)即move(a, c)

以上為循環(huán)執(zhí)行hanoi(n-1, one, three, two)函數(shù),直到“n==1”

}

執(zhí)行move(one, three);

執(zhí)行hanoi(n-1, two, one, three)

{

循環(huán)執(zhí)行hanoi(n-1, two, one, three),直到“n==1”

}

}

主要是遞歸的用法

好像解釋的不太清楚,但希望能幫到你。

C語言漢諾塔程序

將以下內(nèi)容全部復(fù)制到新建的源文件中:(本人自己寫的,因?yàn)槟隳钦n本上的代碼,沒解釋,書寫不規(guī)范,很難理解清楚,所以我直接新寫了一個(gè)完整的代碼,附帶詳細(xì)說明)

#include stdio.h

//漢諾塔x層塔從A塔整體搬到C塔,中間臨時(shí)B塔。

//x層塔是從大到小往上疊放。每次移動(dòng)只能移動(dòng)一層塔。并且在移動(dòng)過程中必須保證小層在上邊

//借助B塔可以將x層塔全部從A搬到C上,并且符合要求(在移動(dòng)過程中大的那塊在下邊,小的那塊在上邊)

int main()

{

void tower(int x,char a,char b,char c); //聲明函數(shù)

int x=5,a='A',b='B',c='C'; //x表示有5層塔,具體要多少層自己修改這個(gè)值。abc分別表示ABC塔。

tower(x,a,b,c); //x層塔從a移動(dòng)到c的全過程,主程序只有這條有效語句

return 0;

}

//以下是tower函數(shù)的定義

//參數(shù)解析:x層塔放在a上,b是中間塔,c是目標(biāo)塔。即x層塔要從a搬到c上。

//此函數(shù)實(shí)現(xiàn)x層塔從a整體轉(zhuǎn)移到c上。以及這個(gè)過程是怎么搬的全部過程。

void tower(int x,char a,char b,char c)

{

if(x==1)printf("將%d從%c放到%c\n",x,a,c); //只有1層塔時(shí),直接從a搬到c上。

else //不止1層塔,則先將x-1層塔從a按照規(guī)律搬到b上,再將最后一塊從a搬到c上,最后再將b上的x-1層塔按照規(guī)律搬到c上。

{

tower(x-1,a,c,b); //先將x-1層塔從a按照規(guī)律搬到b上,注意參數(shù)b放在最后,因?yàn)榉旁谧詈蟮膮?shù)是準(zhǔn)備搬過去的目標(biāo)塔。

printf("將%d從%c放到%c\n",x,a,c); //將最后一塊從a搬到c上

tower(x-1,b,a,c); //最后再將b上的x-1層塔按照規(guī)律搬到c上,注意參數(shù)b放在開頭,因?yàn)閤-1層是要從b上搬過去的。

}

}

C語言函數(shù)遞歸調(diào)用漢諾塔問題

#includestdio.h

void?move(int?n,char?a,char?b,char?c)

{

if(n==1)

printf("\t%c-%c\n",a,c);??? //當(dāng)n只有1個(gè)的時(shí)候直接從a移動(dòng)到c

else

{

move(n-1,a,c,b);??????????? //第n-1個(gè)要從a通過c移動(dòng)到b

printf("\t%c-%c\n",a,c);

move(n-1,b,a,c);??????????? //n-1個(gè)移動(dòng)過來之后b變開始盤,b通過a移動(dòng)到c,這邊很難理解

}

}

main()

{

int?n;

printf("請輸入要移動(dòng)的塊數(shù):");

scanf("%d",n);

move(n,'a','b','c');

}

網(wǎng)頁題目:c語言漢諾塔函數(shù)調(diào)用 用c語言實(shí)現(xiàn)漢諾塔
分享URL:http://muchs.cn/article38/dospjsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)虛擬主機(jī)、網(wǎng)站維護(hù)網(wǎng)站制作、外貿(mào)建站網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)