1.如果a柱只有一个盘子:直接把a柱上的盘子转移到c柱
2.如果有a柱有一个盘子以上(核心的三个步骤):
2.1 //先把a柱上的n-1个盘子转移到b柱上
2.2 //再把a柱上剩下的一个最大的盘子转移到c柱上
2.3 //最后把b柱上的n-1个盘子全部转移到c柱上
(图解)假如a上有三个盘子
#include<stdio.h> void move(char,char); void hanoi(int, char, char, char); int main() { int n = 0; printf("请输入a上盘子的数量:"); scanf("%d", &n); printf("相应操作为\n"); hanoi(n, 'a', 'b', 'c'); // n个盘子 从a 经由b 到c return 0; } void move(char c1, char c2) { printf("%c->%c\n", c1, c2); } void hanoi(int n, char x, char y, char z) { if (n == 1)//如果才有一个盘子,直接把盘子从x拿到z上: move(x, z); else//如果有一个以上的盘子: { hanoi(n - 1, x, z, y);//第一步:将x上的n-1个盘子经由z转移到y上 move(x, z);//第二部:将x上剩下的一个盘子转移到z上 hanoi(n - 1, y, x, z);//第三部:将y上的n-1歌盘子经由x转移到z上 } }
运行结果: