递归实现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做辅助

              }
}

 

posted @ 2012-03-01 00:30  KAYAK  阅读(1579)  评论(0编辑  收藏  举报