Re: [問題] 河內塔的解釋方式?
※ 引述《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
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章