日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言(CED)递归实现汉诺塔问题

發(fā)布時(shí)間:2025/3/8 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言(CED)递归实现汉诺塔问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、問(wèn)題大意

大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開(kāi)始按大小順序重新擺放在另一根柱子上。并且規(guī)定,任何時(shí)候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動(dòng)一個(gè)圓盤。問(wèn)應(yīng)該如何操作?(百度百科)現(xiàn)要求寫(xiě)出一個(gè)代碼,表明移動(dòng)圓盤的過(guò)程。

二、大致思路

?遞歸的問(wèn)題不用想的很復(fù)雜,這道題目在思考起來(lái),應(yīng)該從最后的結(jié)果入手:除最小的圓盤外,其他的圓盤已經(jīng)在第三根柱子上了,而且按照從小到大的順序排列著,現(xiàn)在只需要將最后一個(gè)并且是最小的圓盤移到第三根柱子上就大功告成了。

我的代碼是用A、B、C三個(gè)字母代表三根柱子,A->B表示從把A的圓盤移到B上。既然是遞歸,那么就得思考一下遞歸到何時(shí),遞歸終止。要說(shuō)終止,上文已經(jīng)說(shuō)了,最小的那一個(gè)圓盤落在第三根柱子上就終止了。也就是n等于1時(shí)終止,那么具體的移動(dòng)過(guò)程是一個(gè)什么樣的思路呢?

假設(shè):

我們已經(jīng)擁有了解決這個(gè)問(wèn)題的函數(shù)hannuota(int n,char A,char B,char C)

a、那么,依照上述綠色的文字,我們需要把n-1個(gè)圓盤通過(guò)C移動(dòng)到B后,最大的那一個(gè)圓盤才能移動(dòng)到C上,所以就有:

hannuota(n-1,A,C,B);?

b、然后顯示A->C上"printf("%c->%c\n",A,C);"這里看似是A->C,其實(shí)是由傳遞到A、C對(duì)應(yīng)位置的參數(shù)確定的,所以也就可以輸出移動(dòng)過(guò)程。(我覺(jué)得這是本題最巧妙的存在)

b、最大的圓盤移動(dòng)到C上之后,B上的剩余的圓盤需要借助A移動(dòng)到C上。所以就有:hannuota(n-1,B,A,C)

?這樣就解決問(wèn)題啊!

三、具體實(shí)現(xiàn)

#include<stdio.h> #include<stdlib.h> int hannuota(int n, char A, char B, char C)//用大寫(xiě)的ABC代替漢諾塔的三根柱子 {if (n == 1)printf("%c->%c\n", A, C); //當(dāng)n=1時(shí),直接把盤子從A移動(dòng)到C,//也是遞歸終止的條件else{hannuota(n - 1, A, C, B); //把A的n-1個(gè)盤子通過(guò)C移動(dòng)到Bprintf("%c->%c\n", A, C); //顯示從A移動(dòng)到C的所有的圓盤的過(guò)程,因?yàn)閭鲄⒌牟煌?/所以可以顯示過(guò)程hannuota(n - 1, B, A, C); //把B上面的n-1個(gè)盤通過(guò)A移動(dòng)到C}return 0; }int main() {printf("請(qǐng)輸入漢諾塔的層數(shù):\n");int n;scanf("%d", &n);printf("漢諾塔移動(dòng)過(guò)程:\n");hannuota(n, 'A', 'B', 'C');system("pause");return 0; }

四、實(shí)驗(yàn)結(jié)果?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的C语言(CED)递归实现汉诺塔问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。