对汉诺塔递归算法的研究


汉诺塔问题的递归解法是一个非常经典的算法。


一、递归描述

1 、当disc=1时:

                          将盘子从X柱直接移到Z柱;

                          完成。                     

2、当disc=2时:

                          首先将编号为1的盘子从X柱移到Y柱;

                          其次将编号为2的盘子从X柱移到Z柱;

                          最后将编号为1的盘子从Y柱移到Z柱;

                          完成。


3、由2推广可知,当disc=n时:

                          首先将n-1个盘子从X柱移到Y柱;

                          其次将编号为n的盘子从X柱移到Z柱;

                          最后将n-1个盘子从Y柱移到Z柱;

                          完成。


二、利用C++实现该递归算法

String Hanoi(int number, String X, String Y, String Z)
{


    if(number==1)
    {
       result=result+"Step-"+IntToStr(step)+"  Move disc "+IntToStr(number)+" from "+X+" to "+Z+"\n";

       step++;

    }else
     {
        Hanoi(number-1, X, Z, Y);

        result=result+"Step-"+IntToStr(step)+"  Move disc "+IntToStr(number)+" from "+X+" to "+Z+"\n";

        step++;

        Hanoi(number-1, Y, X,Z);

     }

     return result;

}
 


三、利用UML序列图描述递归算法的执行过程(disc=3)





四、算法测试——求解河内塔问题


河内塔问题就是disc=8的汉诺塔问题。


结算结果




由此可见,汉诺塔递归算法的时间复杂度为




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值