English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

最近學函數.學到一個河內塔.程式如下
#include
#include
void hanoi(int,int,int,int);

int main(void)
{
int i;

printf("總共有多少圓盤要搬?\n");
scanf("%d",&i);
hanoi(i,1,2,3);
system("pause");
return 0;
}

void hanoi(int i,int begin,int mid,int dest)
{
if (i==1) /* 遞迴終止條件 */
printf("將第 %d 個盤子從第 %d 個塔移到第 %d 個塔\n",
i,begin,dest);
else
{
hanoi(i-1,begin,dest,mid);
printf("將第 %d 個盤子從第 %d 個塔移到第 %d 個塔\n",
i,begin,dest);
hanoi(i-1,mid,begin,dest);
}
}
請問河內塔的函式是怎麼形成的.我根本完全看不懂= =
請大大幫我講解一下
PS.自學感覺快倒了...越到後面越難理解.囧....

2007-10-07 11:22:08 · 3 個解答 · 發問者 ? 2 in 電腦與網際網路 程式設計

3 個解答

假設有A(source)、B(temp)、C(dest)三根柱子
則move只是在做就是把A的東西都搬到C
河內塔你知道的就是
先把n-1個搬到B
再把最後一個搬到C
再把n-1也搬到C
所以程式如下:
void move(int n, char source, char temp, char dest) //source搬到dest(A搬到C)
{
if(n){
move(int n-1,source,dest,temp); //source搬到temp(A搬到B)
printf("move disk%d from peg%c to %c \n",n,soerce,dest); //最下面的一個A搬到C
move(int n-1,temp,source,dest); //再從temp搬到dest(再從B搬到C)
}
解說的應該了解了吧!
以上都是我自己寫的

2007-10-08 02:49:44 · answer #1 · answered by WHO00 4 · 0 0

參考這裡看看http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=homework&id=8351

2007-10-07 13:00:36 · answer #2 · answered by 小樹 2 · 0 0

河內塔的函式是來自「堆疊」,河內塔的概念也是來自「堆疊」,遞迴也是「堆疊」。先進後出,後進先出。

2007-10-07 12:35:43 · answer #3 · answered by Big_John-tw 7 · 0 0

fedest.com, questions and answers