汉诺塔递归算法

大学的时候专业课程很差,指导大二学习算法设计的时候,发现专业课里比较有趣的一门。专心学习了一学期

最近在学习python发现了一个递归算法很迷茫,遂研究了一下。

简单来说明一下:首先汉诺塔的规则是1、每次移动一块 2、小木块只能放在大木块上  3、将所有木块从A柱子移动C柱子木块上

用几个变量和常量来表示  n表示一共有多少木块   A、B、C分别表示柱子

那么如果n=1木块 这个就是好说,移动的方式就是 A---->C

n=2   移动的方式就是 A---->B 、A---->C 、B---->C

n=3    移动的方式就是 A-->C A-->B C-->B A-->C B-->A B-->C A-->C

依次类推  我们可以简化为只有两块,那么移动只需要三步 

第一步:把上面的n-1块木块  从来A---->B 

第二步: 然后把最下面那块 从A---->C

第三步:最后把B上面的n-1块移动到C

A  0,B n-1,C  1;

那么接下来就是 就相当于把B当成A 位置的柱子,把n-1木块看成新的N块木块

重复以上步骤

抽象成方法就是

move(N、A、B、C);

调用时每次都是A---->C   

第一步 move(N-1、A、C、B);

第二步  move(1、A、B、C);

第三步  move(N-1、B、A、C);

这样就完成了木块的递归移动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值