漢諾塔問題(遞歸寫法)

      網友投稿 1043 2025-03-31

      漢諾塔問題是一個很經典的題目

      哈哈,其實就是我們都已經很熟悉游戲規則了,在此我就在啰嗦一遍題目。

      題目描述:

      給定一個由n個圓盤組成的塔,這些圓盤按照大小遞減的方式套在第一根柱上。現要將整個塔移動到第三根柱上,每次只能移動一個圓盤,且較大的圓盤在移動過程中不能放置在較小的圓盤上面。

      輸入

      輸入只有一個正整數n

      輸出:

      接下來每一行輸出一步移動步驟。

      在此,我們討論比較一種簡單而且很好理解的做法——遞歸做法,既然遞歸,我們只要想好遞歸函數,其它的就交給函數吧。

      好了,正經了,我們可以想象除了一個圓盤外最簡單的一種情況——兩個圓盤(哈哈),這種我們當然都知道了。

      第一步:只要把上面的1號從A移動到B。

      第二步:把2號從A移動到C。

      第三步:再把1號從B移動到C就可以了。

      (ps:手繪的圖,大家就忍受下吧[委屈])

      此時,我們想想,我們剛才的步驟是不是就是將兩個圓盤從A借助B移動到了C。在我們將1號從A移動到B的時候我們也可以理解成把1號這個圓盤從A借助C移動到B(但是事實我們并沒有借助)。這時我們就可以想象了,把那個1號圓盤當做成除了最下面那個圓盤外的(n-1)個圓盤,這時,是不是就豁然開朗了,對于n個圓盤我們一樣可以分為三步走[嘻嘻]。

      第一步:將(n-1)個圓盤從A借助C移動到B

      第二步:將第n個圓盤從A移動到C

      第三步:將(n-1)個圓盤從B借助A移動到C

      代碼實現下:

      void hanoi(int n,char A,char B,char C) { if(n==0) return ; hanoi(n-1,A,C,B); step(n,A,C); hanoi(n-1,B,A,C); }

      1

      2

      3

      4

      5

      6

      7

      8

      另外為了觀察,我們還需要寫一個打印移動步驟的函數。把id號圓盤從a位置移動到b位置。

      上代碼:

      void step(int id,char a,char b) // 把id號圓盤從a位置移動到b位置 { cout<<"第"<

      1

      2

      3

      4

      漢諾塔問題(遞歸寫法)

      輸出結果:

      至于輸出的結果當然就是輸出:將n個圓盤從A借助B移動到C的步數,也就是

      hanoi(n,‘A’,‘B’,‘C’)

      。

      完整代碼:

      #include using namespace std; int cnt; void step(int id,char a,char b) { cout<<"第"<>n; hanoi(n,'A','B','C'); return 0; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      感謝閱讀!

      不妨點個贊再走唄,感謝支持!

      加油!

      共同努力!

      Keafmd

      數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:ppt如何制作表格(ppt如何制作表格步驟)
      下一篇:不使用huaweicloud-sdk包獲取IAM的token的方法_python語言實現
      相關文章
      亚洲中文无码永久免| 亚洲熟妇无码一区二区三区| 久久精品国产精品亚洲蜜月| 久久精品国产亚洲αv忘忧草| 国产精品亚洲专区无码不卡| 亚洲AV无码一区二区二三区入口| 亚洲一卡一卡二新区无人区| 亚洲综合校园春色| 亚洲精品在线观看视频| 久久精品国产亚洲av品善| 久久精品国产亚洲AV高清热 | 亚洲日本成本人观看| 亚洲国产精品无码久久久蜜芽| 伊人久久亚洲综合影院首页| 亚洲日本人成中文字幕| xxx毛茸茸的亚洲| 亚洲性色精品一区二区在线| 亚洲精品无码久久久久A片苍井空| 亚洲丝袜美腿视频| 亚洲熟妇无码另类久久久| 亚洲第一第二第三第四第五第六| 亚洲精品无码久久久久A片苍井空| 亚洲AV无码国产一区二区三区| 亚洲制服丝袜一区二区三区| 国产亚洲3p无码一区二区| 亚洲国产成人久久笫一页| 亚洲jjzzjjzz在线观看| 亚洲色图在线观看| 亚洲色欲www综合网| 婷婷精品国产亚洲AV麻豆不片 | 亚洲精品国产精品| 一区二区三区亚洲视频| 亚洲综合一区国产精品| 亚洲日韩国产AV无码无码精品| 亚洲暴爽av人人爽日日碰| 亚洲精品tv久久久久| 亚洲综合av一区二区三区不卡| 亚洲爆乳AAA无码专区| 亚洲中文字幕无码爆乳av中文| 国产乱辈通伦影片在线播放亚洲 | 亚洲va在线va天堂va四虎|