• 5.汉诺塔问题-(递归)


    OpenJudge - 6261:汉诺塔问题


    解题思路:

    (1)要将最左边柱子上的圆盘全部移动到中间柱,并且只能每次移动一个圆盘,小的只能放在大的上面,当圆盘只有两个的时候,只需要3步即可完成,如图所示: 

                         

    (2)当n=3,即要把左边的三个圆盘放入中间柱的话,需要7步完成,如下图所示: 

                        

     (3)当我们把最大的圆盘看为一部分,他上面的看成一个整体的时候,那么3步即可完成,如下图所示:

    (4) 上述图示基本明白了,如果要解决将n个圆盘从a移动到b的话,可以分解为规模更小的子问题,如果利用递归思想解题的话,最小的子问题也就是出口到底在哪里呢?最小的子问题也就是1个圆盘的时候,直接从a柱移动到b柱即可。

    (5)那么当圆盘有两个的时候,因为大盘上面只能落小盘,1号圆盘必须经过b柱先去c柱,这样,2号盘才能一下移动到b柱,然后再将1号盘从c柱移动到b柱

    (6)着重分析三个盘子的时候,首先把1号和2号绑在一起,他俩需要跨过b柱放到c柱

             步骤1为move(2,a,c,b)即a柱是初始地点,c是目标地点,b是过渡地点

             步骤2为将3号盘从a柱移动到b柱,cout<

             步骤3为将1号和2号盘从c柱移动到b柱,因为不能一次性移动,所以要借助a柱,即move(2,c,b,a)

    (7)在上述步骤1的时候,将1和2号盘移动到c柱的时候,又发生了3个步骤

              步骤1.1 将1号圆盘放到b柱

              步骤1.2 将2号圆盘放到c柱

              步骤1.3 将1号圆盘放到c柱

    (8)在上述步骤3的时候,将1和2号盘移动到b柱的时候,同样发生了3个步骤

              步骤3.1 将1号圆盘放到a柱

              步骤3.2 将2号圆盘放到b柱

              步骤3.3 将1号圆盘放到b柱

    (9)在解决递归问题的时候,分析出可以利用递归思想即可,要去找递归出口和子问题的表达式,如何找到表达式,就找最小子问题和次二小子问题的关系,不要去想过于冗杂的数据和过程,

           设move(n,a,b,c)函数为将n个圆盘从a柱(初始柱)移到b柱(目标柱),c柱(过渡柱),那么递归的出口应该是,if(n==1)cout<"<"<

          将n-1个盘子从a柱转移到c柱,b为过渡柱,即move(n-1,a,c,b);

          然后将第n个盘子从a柱直接转移到b柱,cout<"<"<

          最后将n-1个盘子从c柱转移到b柱,a为过渡柱,即move(n-1,c,b,a);


    1. #include
    2. using namespace std;
    3. void move(int n,char a,char b,char c)
    4. {
    5. if(n==1)//递归出口
    6. cout<"->"<"->"<//只有一个盘子,直接从a放到b
    7. else
    8. {
    9. move(n-1,a,c,b);//将n-1个盘子从a柱放到c柱,b为过渡柱
    10. cout<"->"<"->"<//将第n个盘子从a柱移到b柱
    11. move(n-1,c,b,a);//将n-1个盘子从c柱移到b柱,a为过渡柱
    12. }
    13. }
    14. int main()
    15. {
    16. int m;
    17. char x,y,z;
    18. cin>>m;
    19. cin>>x>>y>>z;
    20. move(m,x,y,z);
    21. return 0;
    22. }

  • 相关阅读:
    能带你起飞的【数据结构】成王第八篇:二叉树
    计算机竞赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别
    [附源码]计算机毕业设计少儿节目智能推荐系统Springboot程序
    深度解读AIGC存储解决方案
    急躁型人格分析,如何改变急躁性性格?
    prometheus 监控oracle
    HTML大学班级活动网页设计 、大学校园HTML实例网页代码 、本实例适合于初学HTML的同学
    2022年前端技术发展趋势
    【ajax跨域问题解决之jsonp】
    Pytorch笔记之分类
  • 原文地址:https://blog.csdn.net/weixin_60869516/article/details/127098861