递归实现hanoi塔问题算法
三个塔座,X、Y、Z
X上有n个直径大小各不相同从大到小依次编号为n的圆盘,
将X塔上的圆盘移到Z塔,要求:
*每次只能移动一个圆盘
*任何时候不能将较大的圆盘压在较小的圆盘之上
算法分析:
如果X塔上只有一个圆盘,则直接移到Z轴上即可
如果X塔上圆盘个数>1,先将X塔上的n-1个盘借助Z塔依次挪到Y塔上,将X塔上的n盘移到Z塔上
以此类推,将Y他上的n-2个盘借助Z塔依次挪到X塔上,将Y塔上的n-1盘移到Z塔上
边界条件 Z塔的盘子数量=n
算法:伪代码
//将x塔上的n个盘子,从X移到Z,用y做辅助
void hannoi(int n ,char x,char y,char z)
{
if(n==1)
{
move(x,1,z);
}
else
{
hannoi(n-1,x,z,y);//将x塔上的n-1个盘子移到y,z做辅助
move(x,n,z) ; //将n从x移到z
hannio(n-1,y,x);//将y上n-1个圆盘移到z,x做辅助
}
}