真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript每日一題,JavaScript簡答題

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

我一步步的給你講,就會懂啦:

創(chuàng)新互聯(lián)建站是專業(yè)的朗縣網(wǎng)站建設(shè)公司,朗縣接單;提供成都網(wǎng)站設(shè)計、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行朗縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

首先hanoi函數(shù)如果把當(dāng)中的move函數(shù)給去掉,就變成了:

void?hanoi(int?n,?char?one?,?char?two,?charthree)

{

if(n?==?1)

printf("%c-%c\n",?one,?three);

else

{

hanoi(n?-?1,?one,?three,?two);

printf("%c-%c\n",?one,?three);

hanoi(n?-?1,?two,?one,?three);

}

}

也就是把move(one,three),變成了printf("%c-%c\n", one, three);。少了一個函數(shù),更加清晰

所以這里的hanoi函數(shù)就有了執(zhí)行的內(nèi)容:printf

下面以3個盤子為例進(jìn)行模擬計算機(jī)的執(zhí)行過程:

1、hanoi(3,A,B,C),開始了這步,進(jìn)入第一層函數(shù),計算機(jī)在函數(shù)中會進(jìn)行自我的再次調(diào)用(第7行代碼)

2、(第7行):hanoi(2,A,C,B),于是這又是一個新的hanoi函數(shù),這里我把它成為第二層函數(shù)

同樣執(zhí)行到第7行,卡住了,再次一次自我的調(diào)用

3、(進(jìn)入第三層函數(shù)):hanoi(1,A,B,C),這里的第三層n=1,所以在第四行就顯示出了"A-C",至此,第三層函數(shù)結(jié)束,回到調(diào)用他的第二層函數(shù)

4、在第二層當(dāng)中,繼續(xù)第8行的內(nèi)容,所以顯示出"A-B",繼續(xù)運(yùn)行,到第9行,開始了有一次自我調(diào)用

5、把她稱為貳號第三層函數(shù)吧。。。hanoi(1,B,A,C),和第3步類似,這一層函數(shù)顯示出了"B-C",然后結(jié)束函數(shù),返回調(diào)用它的第二層函數(shù)

6、第二層函數(shù)執(zhí)行完畢,返回調(diào)用它的第一層函數(shù)

7、第一層函數(shù)中執(zhí)行到第8行,顯示出"A-C",然后執(zhí)行第9行:hanoi(2,B,A,C)

............

如果看到了這里理清楚了關(guān)系就會懂啦,接下來還有一半,如果都寫下來就太復(fù)雜了-。-

你所說的空函數(shù)是指沒有返回值,但是這里利用的是電腦調(diào)用函數(shù)的那種關(guān)系來解決的問題,比如上面的3步,會自動返回到第二層函數(shù)并繼續(xù)

還可以這樣理解漢諾塔,漢諾塔其實(shí)是將復(fù)雜的問題簡單化,

先不管他有多少個盤子從A到C,我只把它視作3步

就像上面那樣找個例子,反復(fù)的按照代碼模擬計算機(jī)運(yùn)行,過個五次六次,就會懂啦

c語言用遞歸實(shí)現(xiàn)漢諾塔

見代碼注釋,還有不懂可以問。

#include?stdio.h

void?move(char?x,char?y)

{

printf("%c--%c\n",x,y);

}

//hannuota函數(shù)的作用:把n個圓盤從one柱子借助two柱子放到three柱子?

void?hannuota(int?n,char?one,char?two,char?three)

{

if(n==1)//如果只有一個柱子?

move(one,three);//直接移動即可?

else

{

hannuota(n-1,one,three,two);//先把one柱子上的n-1個圓盤借助three柱子移動到柱子two?

move(one,three);//把第一個柱子的剩下那一個(第n個)移動到第三個柱子

//由于原來one柱子上的n-1個圓盤已經(jīng)移動到了two柱子上,因此不會有圓盤擋住n圓盤出來?

hannuota(n-1,two,one,three);

//最后再把那n-1個圓盤從two柱子借助one柱子移動到three柱子

//(上面第一句話hannuota(n-1,one,three,two)已經(jīng)移動到了two柱子,因此這里是從two柱子移動到three柱子)?

}

}

int?main()

{

int?m;

printf("input?the?number?of?diskes:");

scanf("%d",m);

printf("The?step?to?move?%d?diskes:\n",m);

hannuota(m,'A','B','C');

return?0;

}

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

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

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

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

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),此時 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),此時 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”

}

}

主要是遞歸的用法

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


當(dāng)前文章:javascript每日一題,JavaScript簡答題
本文鏈接:http://weahome.cn/article/phiejp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部