递归算法解决梵塔问题

问题简述:

“梵塔问题”源于以下的古老传说:

在世界中心贝那勒斯(印度北部的佛教圣地)的圣庙里,安放着一块黄铜板,板上插著三根细细的、镶上宝石的细针,细针像菜叶般粗,而高就像成人由手腕到肘关节的长。

当印度教的主神梵天在创造地球这个世界时,就在其中的一根针上从下到上放了半径由大到小的六十四片圆金片环,这就是有名的「梵塔」或称「汉内塔」(Towers of Hanoi)。

抽象模型:

已知有三根石柱,不妨设为A,B,C,其中A上套有自下向上依次增大的64个圆盘,问如何将A的圆盘全部转移到B上,移动的规则是:每次只能移动一个圆盘,且不允许将大盘放到小盘上。

考虑递归递归算法,并将问题分解:

(1)先设法将63个圆盘从A移动到C

(2)将A上最后一个盘移动到B

(3)将C上63个盘全部移动到B上

#honoi问题
def honoi(n,first,second,third):
    if n==1:
        return print('move a disk'+'  from  ' +first+ '  to  '+ second)
    honoi(n-1,first,third,second)
    print ('move a disk'+'  from  ' +first+ '  to  '+ second) 
    honoi(n-1,third,second,first)
honoi(5,'A','B','C')   

显然,n=64时是个无穷数,此处以n=5为例。

执行结果:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值