python汉诺塔_python 汉诺塔

汉诺塔是由三根杆子A,B,C组成的。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。问:如何移?最少要移动多少次?汉诺塔是根据一个传说形成的一个问题:

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:

每次只能移动一个圆盘;

大盘不能叠在小盘上面。

提示:可将圆盘临时置于A杆,也可将从B杆移出的圆盘重新移回B杆,但都必须尊循上述两条规则。

问:如何移?最少要移动多少次?

python实现方法:递归法

我们最终得到的结果是将所有的圆盘按规定的方法从B移到C,对于C来说,当第n个盘子(最大的那个盘子)移动到C时,已经固定了,以后的操作都不用动这块盘子,而当这个盘子从A移动到C的前一步是其它n-1个盘子应该是在B上了,依次类推,当第n-1个盘子从B移动到C前,之前的n-2个盘子应该是在A上

总结以上的思路,可以将整个过程分三步走:

Step1.把除了最大的环之外的环,从A移动到B

A -> B

Step2.将最大的环从A移动到C

A -> C

Step3.把除了最大的环之外的环,从B移动到C

B -> C

参照下图

(a)是初始状态,也就是递归的起点,我们假设n=4, move(4,A,B,C)还是请参考现在最高的分的代码哈~写这个是帮助大家更清楚那个让人压力大的(“抽象”)两个字,哈哈

(b)是step1完成的时候的状态,已经将所有的n-1,这里也就是3个环从A挪到了B

(c)是step2,此时需要将第n个,也就是第四个最大的环从A挪到C

C")>

(d)是step3,此时需要将B上面的n-1个环从B挪到C

Python编写代码如下:

#!/usr/bin/python

def move(n,a,b,c):

If n == 1:

Print(a,’-->’,c)

else:

Move(n-1,a,c,b)  #将A上面的n-1个盘子通过C移动到B

Move(1,a,b,c)     #将A上最大的那个盘子通过B移动到C

Move(n-1,b,a,c)  #将B上的n-1个盘子通过A移动到C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值