Re: [問題] 河內塔的解釋方式?

看板C_and_CPP (C/C++)作者 (Alien)時間17年前 (2007/03/26 11:03), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《QQamin (菜鳥工程師一枚~)》之銘言: : #include <stdio.h> : #include <stdlib.h> : void change(char, char, char, int); : int count = 0; : int main(void) : { : int height; : printf ("請輸入高度 = "); : scanf ("%d",&height); : change('A', 'B', 'C', height); : printf("\n總共移動 %d 次\n", count); : system("pause"); : return 0; : } : void change(char a, char b, char c, int n) : { : count++; : if (n==1) : printf ("移動第 %d 盤子從 %c -> %c\n", n, a, c); : else : { : change (a, c, b, n-1); : printf ("移動第 %d 盤子從 %c -> %c\n", n, a, c); : change (b, a, c, n-1); : } : } : 這是河內塔的程式 : 我也知道要怎麼玩 : 可是要怎麼解釋@@? : 我目前想到的解釋方法是 : 河內塔的玩法很固定,就是看一開始幾根然後決定怎麼搬 : 單數就先A-->C 雙數就先A-->B : 跟著就一值依序搬 (只是怎麼解釋這個依序搬 ...) : 所以用無賴法湊出N=2的答案之後 : 就可以得到n根的解答 : 這是我的作業0,0a : 上班後的作業 : 主管叫我們新人解釋這個程式... : 有人能幫忙一下嗎? : ps.我查過/河內塔了 只是依然不甚了解 囧a Hanoi Tower 一般的解釋都是 A B C 三根柱 (不是直接對應遊戲中那三根) 假如要由 A 搬 n 個盤到 B, 假如 n = 1 的話, 直接搬就好, 不然 就先 由 A 搬 n-1 個盤到 C, 把 A 剩下的一個搬到B, 再把 C 的盤都搬到 B 然後你會問, A 怎樣搬 n-1 個盤到 C? 方法就和上面一樣, 只是用作中間 buffer 的是 B. 聽下去有一直循環的感覺嗎? 因為Hanio Tower 是最 typical 的 recursion 的例子嘛 搞清楚那 recursion 在做什麼, 你就會明白 這程式在搞什麼鬼了 :) Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.22.246.26

03/26 12:47, , 1F
解釋的好清楚 我瞭了^___^
03/26 12:47, 1F
文章代碼(AID): #161pVw8i (C_and_CPP)
文章代碼(AID): #161pVw8i (C_and_CPP)