使用递归模拟N层汉诺塔的移动过程
把N层塔从A移到C,分为三步:
1.把A的N-1层移到B
2.把A剩下最后一层移到C
3.把B上的N-1层移到C
使用递归只要解决N-1层问题就能解决全部问题。
新建函数void move(int n,char a,char b,char c);
n为层数,a为起始位置,b为缓冲位置,c为目标位置
当a上的层数为n时,把a上的n-1层都移到b上,所以此时b为目标位置,c为缓冲位置
move(n-1,a,c,b);
此时a剩下最后一层移到c上,c为目标位置
move(1,a,b,c);
最后把b上的n-1层都移动到c上,b为起始位置
move(n-1,b,a,c);
完成
1 #include <stdio.h>
2 #define layer 3 //层数
3
4 void move(int n,char a,char b,char c)
5 {
6 if(1 == n)
7 {
8 printf("from %c to %c\n",a,c);
9 }
10 else
11 {
12 move(n-1,a,c,b);
13 move(1,a,b,c);
14 move(n-1,b,a,c);
15 }
16 }
17
18 int main()
19 {
20 move(layer,'A','B','C');
21 }