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柱子