汉诺塔递归问题的python实现

汉诺塔问题

汉诺塔问题是给定3个塔a,b,c,其中a称为开始盘,b称为过渡盘,c是目标盘。汉诺塔问题的目标是通过一定的规则把a塔上的盘子移动到c上,使得c塔与a塔上的盘子一模一样 。

汉诺塔游戏的规则是:1、每次只能移动一个盘子

                                     2、任何一次移动,三个塔的状态都必须是小盘子在上,大盘子在下

 

移动方法: 1:当n=1时,直接把a上的一个盘子移动到c上 

                   2:当n=2时,首先把a塔上小盘子移动到b盘子上, 再把a塔上的大盘子移动到c塔上 最后把b塔上的盘子移到c塔上  

                   3:n>2时,思想是把a塔上面的n-1个小盘子借助于c塔移动到b塔上面去,该部分代码可以使用递归实现。再把a塔上剩下的一个盘子放到c塔上面。其次,将b塔上面的n-1个盘子,借助于a塔移动到c塔上去,该部分也使用递归实现。

 

#汉诺塔问题的python代码实现
def han(n,a,b,c):
    '''
    汉诺塔的递归实现
    n:代表几何盒子
    a:代表第一个盘子,开始塔
    b:代表第二个盘子,中间过渡塔
    c:代表第三个盘子,目标塔
    '''
    if n==1:
        print(a,'-->',c)
        return None
    if n==2:
        print(a,'-->',b)
        print(a,'-->',c)
        print(b,'-->',c)
        return None
    # if n>2:把n-1个盘子,从a借助于c移动到b上去,再把a塔剩下的一个放到c塔上
    han(n-1,a,c,b)   #实现递归调用
    print(a,'-->',c)
    #再把n-1个盘子,借助于a塔挪到c塔上面去
    han(n-1,b,a,c)  #实现递归调用
a='A'
b='B'
c='C'
n=4
han(n,a,b,c)

 

结果显示:

A --> B   A --> C  B --> C    A --> B   C --> A  C --> B   A --> B  A --> C  
B --> C  B --> A    C --> A   B --> C  A --> B   A --> C   B --> C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值