//汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
1 #include <stdio.h> 2 #include <stdlib.h> 3 //汉诺塔使用递归可以很轻松但有点抽象的解决。 4 //汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 5 void fun(int m,char A,char B,char C)//把A柱上的圆盘移动到B柱 6 { 7 if (m == 1) printf("第%d个圆盘从%c柱子移到%c柱子 ", m, A, B);//如果本来只有一个圆盘的话,从A移到B,就直接移动。//注意输出字符串用%c, 8 else//如果是两个圆盘,则先把第一个放到C柱,再把第二个放到B柱,再把第一个放到B柱。 9 { 10 fun(m - 1, A, C, B);//形参B的位置赋值了C,所以这句输出的是C。 11 printf("第%d个圆盘从%c柱子移到%c柱子 ", m, A, B); 12 fun(m - 1, C, B, A);//输出从C移到B。 13 } 14 } 15 void main() 16 { 17 int m; 18 char A = 'A', B = 'B', C = 'C'; 19 printf("请输入汉诺塔的层数:"); 20 scanf("%d",&m);//注意scanf函数的格式。 21 fun(m,A,B,C); 22 }