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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图解汉诺塔(满屏幕都是图)

發布時間:2023/12/29 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图解汉诺塔(满屏幕都是图) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖解漢諾塔(滿屏幕都是圖)

  • 漢諾塔問題
      • 步驟1:
      • 步驟2
      • 步驟3:
      • 技術總結

和很多人一樣,我剛剛接觸漢諾塔的時候,可能說是頭暈目眩,立馬放棄。
但如果用圖形表示感覺會好很多。
以下是我的學習思路:

漢諾塔問題

首先。遞歸的思路是什么?
把復雜的問題簡單化
這里有四層塔,我們要在大塔不壓小塔的情況下,把塔從x移動到z。(靈魂手繪看得懂就行)

所以,我們需要寫個函數來實現這一功能。 首先,我們知道這個函數一共包括四個參數:漢諾塔的層數、x、y、z(圖中包括的四個信息)。我們暫時把這個函數寫作:

f(n,x,y,z)f(n,x,y,z)f(n,x,y,z)
其中
nnn—漢諾塔層數
xxx—x軸
yyy—y軸
zzz—z軸

這個函數的功能是把n層漢諾塔從x移動到z,且中間要通過y。(當然這里的x、y、z都是形參,你傳入什么就是什么,不代表圖中的軸)
本著把復雜問題簡單化的原則,每一個步驟都用一條語句實現。

步驟1:

這里我們把n-1從x移動到了y上,當然我們不能同時移動這么多層,所以形成這一局面一定要通過z。(是不是很熟悉,你想到了什么?……函數,是不是,可以返回去看看) 這里寫出函數: 好的你完成了第一步。

步驟2

現在你可以愉快的把x軸上的一層塔移動到z軸上了!

步驟3:

把y軸上的n-1層塔移動到z軸上,通過x軸。

大功告成!

什么?沒看懂!不著急,下面開始技術總結:

技術總結

當然有一種例外情況(也是遞歸出口),當n=1時,可以直接從x軸移動到z軸。

現在我們可以開始設計函數了:

好的現在開始寫程序(我用的是c,函數名稱叫:hanota)

#include <stdio.h> void hanota(int n, char x, char y, char z) {if (n == 1){printf("%c --> %c\n", x, z);}else{hanota(n - 1, x, z, y);hanota(1, x, y, z);hanota(n - 1, y, x, z);} }int main(void) {char x ='x';char y ='y';char z ='z';int n = 4;hanota(n, x, y, z);} /* 結果輸出: x --> y x --> z y --> z x --> y z --> x z --> y x --> y x --> z y --> z y --> x z --> x y --> z x --> y x --> z y --> z*/

總結

以上是生活随笔為你收集整理的图解汉诺塔(满屏幕都是图)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。