2011年6月17日 星期五

EX17. 河內塔問題

修改程式範例: Ch5-5.c 為 Ch5-5e.c

1. 請建立遞迥函數解出5個盤子 的河內塔問題
2. 請參 考如下方式用Excel寫出所有完整的遞迥呼叫的執行過程
3. 執行 過程Excel檔請在Google 文件設為共用並將url置 於網頁上

https://spreadsheets.google.com/spreadsheet/ccc?key=0ApUm9nzN2PbqdEthRmYyZURuTjM2ODRjSmlNUFdnS2c&hl=en_US




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* 程式範例: Ch5-5e.c */
#include <stdio.h>
#include <stdlib.h>
/* 河內塔問題的遞迴函數 */
int hanoiTower(int dishs,int peg1,int peg2,int peg3) {
   if ( dishs == 1)             /* 終止條件 */
     printf("盤子從 %d 移到 %d\n", peg1, peg3);
   else {
     hanoiTower(dishs - 1,peg1,peg3,peg2); /* 第1步驟 */
     printf("盤子從 %d 移到 %d\n", peg1, peg3);
     hanoiTower(dishs - 1,peg2,peg1,peg3); /* 第3步驟 */
   }
}
/* 主程式 */
int main() {
   hanoiTower(5,1,2,3);          /* 呼叫遞迴函數 */
   system("PAUSE");
   return 0; 
}



執行結果:
盤子從 1 移到 3
盤子從 1 移到 2
盤子從 3 移到 2
盤子從 1 移到 3
盤子從 2 移到 1
盤子從 2 移到 3
盤子從 1 移到 3
盤子從 1 移到 2
盤子從 3 移到 2
盤子從 3 移到 1
盤子從 2 移到 1
盤子從 3 移到 2
盤子從 1 移到 3
盤子從 1 移到 2
盤子從 3 移到 2
盤子從 1 移到 3
盤子從 2 移到 1
盤子從 2 移到 3
盤子從 1 移到 3
盤子從 2 移到 1
盤子從 3 移到 2
盤子從 3 移到 1
盤子從 2 移到 1
盤子從 2 移到 3
盤子從 1 移到 3
盤子從 1 移到 2
盤子從 3 移到 2
盤子從 1 移到 3
盤子從 2 移到 1
盤子從 2 移到 3
盤子從 1 移到 3
請按任意鍵繼續 . . .

沒有留言:

張貼留言