漢諾塔 手寫出棧壓棧過程實現

2022-06-06 03:03:14 字數 2155 閱讀 3231

**實現:

1 #include23//

函式的形參a、b、c不一定代表的是a、b、c柱子,遞迴傳參的時候會變化!

4void hanoit(int n,char a,char b,charc)9

else19}

2021

intmain()

view code

主函式傳參hanoit(2,』a『,『b','c'),壓棧1。

n!=1,於是遞迴執行 hanoit(2-1,a,c,b),壓棧2。

n==1,輸出語句,壓棧3,輸出「將編號為1的盤子從a柱移到b柱",出棧3。

函式hanoit(2-1,a,c,b)出棧2

執行下一條輸出語句,壓棧2,輸出」將編號為2的盤子從a柱移到c柱「,出棧2

執行遞迴 hanoit(2-1,b,a,c),壓棧2,輸出」將編號為1的盤子從b柱移到c柱「,出棧2

函式hanoit(2,』a『,『b','c')出棧1

程式執行完畢

主函式傳參hanoit(n=3,a=』a『,b=『b',c='c'),壓棧1。此時a=a、b=b、c=c

n==3,遞迴執行hanoit(3-1,a,c,b),壓棧2。此時a=a==a、b=c==c、c=b==b

n==2,遞迴執行hanoit(2-1,a,c,b),壓棧3。此時a=a==a、b=c==b、c=b==c

n==1,輸出語句,壓棧4,輸出「將編號為1的盤子從a柱移到c柱",出棧4。

函式hanoit(2-1,a,c,b)執行完畢,出棧3

執行下一條輸出語句,壓棧3,輸出」將編號為2的盤子從a柱移到b柱「,出棧3。

執行函式hanoit(2-1,b,a,c),壓棧3,此時a=b==c、b=a==a、c=c==b

n==1,輸出語句,壓棧4,輸出「將編號為1的盤子從c柱移到b柱",出棧4

函式hanoit(2-1,b,a,c)執行完畢,出棧3

函式hanoit(3-1,a,c,b)執行完畢,出棧2

執行下一條輸出語句,壓棧2,輸出「將編號為3的盤子從a柱移到c柱",出棧2

注意此時n==3時的各個引數順序,往下繼續執行hanoit(3-1,b,a,c),壓棧2,此時a=b==b、b=a==a、c=c==c

n==2,遞迴執行hanoit(2-1,a,c,b),壓棧3。此時a=a==b、b=c==c、c=b==a

n==1,輸出語句,壓棧4,輸出「將編號為1的盤子從b柱移到a柱",出棧4。

函式hanoit(2-1,a,c,b)執行完畢,出棧3

執行下一條輸出語句,壓棧3,輸出」將編號為2的盤子從b柱移到c柱「,出棧3。

往下執行hanoit(2-1,b,a,c),壓棧3。此時a=b==a、b=a==b、c=c==c

n==1,輸出語句,壓棧4,輸出「將編號為1的盤子從a柱移到c柱",出棧4

函式hanoit(2-1,b,a,c)執行完畢,出棧3

函式hanoit(3-1,b,a,c)執行完畢,出棧2

函式hanoit(n=3,a=』a『,b=『b',c='c')執行完畢,出棧1

程式執行完畢

棧的應用 漢諾塔

2014年4月23日 漢諾塔 include brief 把第n個盤子從位置a移動到位置b param n 盤子的編號 param a 源位置 param b 目標位置 return void move int n,char a,char b brief 漢諾塔 param n 盤子的個數 para...

棧的應用 漢諾塔遊戲

他作為乙個理科生是嚴謹的,他認為天才與否,取決於最終達到的高度。一些事情不過比別人早幾年做到,算不上什麼天才。樓天成 棧 stack 它的結構為lifo last in first out 後進先出。如圖所示 漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了...

棧實現 漢諾塔 操作是否符合規範

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧...