汉诺塔递归问题

本文介绍了如何使用递归解决汉诺塔问题。通过将大盘子视为整体,先移动较多数目的圆盘,然后移动单个圆盘,再移动剩余圆盘,实现了从A柱到C柱的正确移动。递归思路是将问题简化,先解决子问题。文中给出了Java代码实现,强调理解柱子角色的重要性,即起始、临时和目标柱子的角色会随着递归调用而变化。
摘要由CSDN通过智能技术生成

汉诺塔问题如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面       

解决问题的方法: 

        解决汉诺塔问题需要用到递归的方法,而递归需要有一个整体思维以及逆向思维,就比如解决这个汉诺塔问题,假设圆盘有5个,我们不用先考虑第1个怎么移动,第2个怎么移动,我们可以先考虑第5个怎么移动,我们不用非要考虑前4个盘子怎么先一个个移到C柱,可以先把上面4个盘子当一个整体,先移动上面4个盘子的整体到B柱,然后移动第5个盘子到C柱,再将4个盘子的整体从B柱移动到C柱,如此就完成了一次移动,同理,当移动上面4个盘子的时候可以将上面3个盘子当一个整体,先移动上面3个盘子的整体到B柱,再移动第4个盘子到C柱,再将3个盘子的整体移动到C柱。同理反复,移动就完成了。

下面就是代码的实现:(假设有5个盘子)

        //首先第一步,我们先传入4个参数,盘子个数num,A,B,C三个柱子a,b,c

       // 这里有个很关键的问题,也是汉诺塔代码我初学的时候看不懂的原因。当我们写代码的时候,那3根柱子不要当成固定的,而是可以移动的,字母只是代称,代码中的abc并不是就单

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值