1 #include <stdio.h>
2
/*
3
* 僞算法(要移動盤子的柱子爲A,藉助的介質柱子爲B,移動到目的柱子爲C.
4
* 若是盤子數爲1,則直接將盤子從A柱子移到C柱子。
5
* 不然:
6
* step1:將A柱子上的N-1個盤子藉助於C柱子移動到B柱子上。
7
* step2:將A柱子上的第N個盤子直接移動到C柱子上。
8
* step3:將B柱子上的N-1個盤子藉助A柱子移動到C柱子上。
9
*/
10
11
void hanoi(
int n,
char A,
char B,
char C) {
12
if (
1 == n) {
13 printf(
"
將編號爲%d的盤子從%c柱子直接移動到%c柱子\n
", n, A, C);
14 }
else {
15 hanoi(n -
1, A, C, B);
16 printf(
"
將編號爲%d的盤子從%c柱子直接移動到%c柱子\n
", n, A, C);
17 hanoi(n -
1, B, A, C);
18 }
19 }
20
int main(
void) {
21
char A =
'
A
';
22
char B =
'
B
';
23
char C =
'
C
';
24
25
int n;
26
27 printf(
"
請輸入柱子的個數:
");
28 scanf(
"
%d
", &n);
29
30 hanoi(n, A, B, C);
31
32
return
0;
33 }
1 E:\tarbitrary\datastructure\recursion>gcc hanoi.c -o hanoi
2
3 E:\tarbitrary\datastructure\recursion>hanoi
4 請輸入柱子的個數:
3
5 將編號爲1的盤子從A柱子直接移動到C柱子
6 將編號爲2的盤子從A柱子直接移動到B柱子
7 將編號爲1的盤子從C柱子直接移動到B柱子
8 將編號爲3的盤子從A柱子直接移動到C柱子
9 將編號爲1的盤子從B柱子直接移動到A柱子
10 將編號爲2的盤子從B柱子直接移動到C柱子
11 將編號爲1的盤子從A柱子直接移動到C柱子