(c语言描述 函数递归汉诺塔)

  汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。   

  可以看出,汉诺塔游戏每增加一个圆盘,他的游戏难度就更高。在现在,完全可以使用计算机中函数的递归来实现它的操作

  算法分析:

三根杆子 x,y,z
汉诺塔的求解过程:
n是碟子数
第一步:将n-1个由x经z移动y上
第二步:将第n个移动到z杆
第三步:将剩余n-1个碟子由y杆经x杆移动到z杆

不难发现,他的通关过程就是3个规律,因此只需要结合这3规律 利用函数递归就可以轻易实现解法

代码实现
#include<stdio.h>
void hanio(int n,char x,char y,char z);
void move(char a1, char a2);
int main()
{
int n;
printf("please enter plate number\n");
scanf("%d", &n);
hanio(n, 'x', 'y', 'z');
return 0;
}
void hanio(int n, char x, char y, char z)
{
if (n == 1)
{
move(x, z);
}
else
{
hanio(n - 1, x, z, y);
move(x, z);
hanio(n - 1, y, x, z);
}
}
void move(char a1,char a2)
{
printf("%c-->%c\n", a1, a2);
}

猜你喜欢

转载自www.cnblogs.com/qy00/p/12788740.html