C递归实现汉诺塔小游戏
汉诺塔又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
不熟悉的友子们可以搜索试玩一下方便理解:https://zhangxiaoleiwk.gitee.io/h.html
对于汉诺塔游戏的程序实现,我们可以将它拆分理解,即每次我们只需处理它的(n-1)级,其他外包出去,一层一层的计算无疑是无比庞大的计算量,而对于问题n,如果n-1已知,那n不很容易解决?汉诺塔的步骤相当于将大象装进冰箱需要几步这个问题一样:开门,装进去,关门即可。
//汉诺塔C程序实现
#include<stdio.h>
void hanoi(int n, char x,char y,char z);
void hanoi(int n, char x, char y, char z)
{
if (n == 1)
{
printf("%c --> %c\n", x, z);//只有一层时直接由A到C
}
else
{
hanoi(n - 1, x, z, y);//借助z将x移动到y上
printf("%c --> %c\n", x, z);
hanoi(n - 1, y, x, z);//借助x将y移动到z上
}
}
int main(void)
{
int n;
printf("请输入汉诺塔层数:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}