/*
Hanoi(汉诺塔)问题,这是一个典型的只有哟个递归方法(不能用
其他方法解决的问题。问题是这样的:有三个塔座A,B,C.A 塔座上
有n个大小不等的圆盘,大的在下,小的在上,要把这n个圆盘从A
移到C上,每次只能移动一个圆盘,移动可以借助B进行,但在任何
时候,任何塔座上的圆盘都必须保持大盘在下,小盘在上,要求编
程打印出移动的步骤
算法的三个步骤可以分成两类操作:
(1)将n-1个圆盘从一个塔座移到另外一个塔座上(n>1),
(2)将一个圆盘从一个塔座移到另外一个塔座上
设计一个函数来实现以上两个操作,函数hanoi(n,x,y,z);
表示将n个圆盘从x塔座移到z塔座,借助y塔座。
*/
#include <stdio.h>
void hanoi(int n,int x,int y,int z) //将n个圆盘从X塔座移到z塔座,借助y塔座
{
if(n==1)
printf("%c-->%c\n",x,z); //如果x上只有一个圆盘,那么直接从x移到z
else
{
hanoi(n-1,x,z,y)
printf("%c-->%c\n",x,z);
hanoi(n-1,y,x,z);
}
}
int main()
{
int n;
printf("请输入圆盘数:\n");
scanf("%d",&n);
printf("从A塔座移动%d个圆盘到C塔座借助B塔座的步骤如下:\n",x,z);
hanoi(n,'A','B','C'); //调用hanoi函数打印移动的步骤
return 0;
}