解决这个问题只需要三步骤:百度百科:
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
(1)以C杆为中介,从A杆将1~n-1号盘移至B杆;
(2)将A杆中剩下的第n号盘移至C杆;
(3)以A杆为中介,从B杆将1~n-1号盘移至C杆。
所以n层汉诺塔有2^n-1次移动!
动画演示:C语言代码实现:
//汉诺塔递归算法 #define _CRT_SECURE_NO_WARNINGS 1 #includeint count = 0;//全局变量,为了统计移动的个数 void Move(int n, char a, char b, char c)//递归实现汉诺塔的函数 { if(n >= 1)//判断条件 { Move(n - 1, a, c, b);//递归,把a塔上编号1~n-1的圆盘移到b上,以c为辅助塔 printf("%c -> %cn", a, c);//把a塔上编号为n的圆盘移到c上 Move(n - 1, b, a, c);//递归,把b塔上编号1~n-1的圆盘移到c上,以a为辅助塔 count++; //统计移动个数 } } int main() { int n = 0; printf("请输入圆盘的个数:"); scanf("%d", &n); Move(n, 'a', 'b', 'c'); printf("总共移动了 %d 次", count); return 0; }



