python递归实现汉诺塔游戏

汉诺塔游戏比较适合用递归的思想去理解。分享自己写的代码

# """
# 汉诺塔游戏  递归算法
# 有三个台子,s为始,e为终,t为中间过渡
# """

class Hannota():
    def __init__(self, src, des, tmp):
        '''
        name three plats
        all string type
        '''
        self.src = src
        self.des = des
        self.tmp = tmp
        self.i = 0
        
    def operation(self, num):
        '''
        opeartion of moving blocks
        num: psitive integer
        '''
        return self._operation(num, self.src, self.des, self.tmp)
    
    def count(self,num):
        '''
        count times of move bloks
        num: psitive integer
        '''
        return 2**num - 1
    
    def _operation(self, num, src, des, tmp):
        if num<=0:
            return None
        
        if num==1:
            self.i += 1
            print("第 ",self.i,"步: 把 "+src+" 顶上的块挪到  "+des+" 上面去")
            return
        
        if num==2:
            self._operation(1, src, tmp, des)
            self._operation(1, src, des, tmp)
            self._operation(1, tmp, des, src)
            
        if num>2:
            self._operation(num-1, src, tmp, des)
            self._operation(1, src, des, tmp)
            self._operation(num-1, tmp, des, src)

aa = Hannota("s", "e", "t")
aa.operation(5)

下面是实现效果

第  1 步: 把 s 顶上的块挪到  e 上面去
第  2 步: 把 s 顶上的块挪到  t 上面去
第  3 步: 把 e 顶上的块挪到  t 上面去
第  4 步: 把 s 顶上的块挪到  e 上面去
第  5 步: 把 t 顶上的块挪到  s 上面去
第  6 步: 把 t 顶上的块挪到  e 上面去
第  7 步: 把 s 顶上的块挪到  e 上面去
第  8 步: 把 s 顶上的块挪到  t 上面去
第  9 步: 把 e 顶上的块挪到  t 上面去
第  10 步: 把 e 顶上的块挪到  s 上面去
第  11 步: 把 t 顶上的块挪到  s 上面去
第  12 步: 把 e 顶上的块挪到  t 上面去
第  13 步: 把 s 顶上的块挪到  e 上面去
第  14 步: 把 s 顶上的块挪到  t 上面去
第  15 步: 把 e 顶上的块挪到  t 上面去
第  16 步: 把 s 顶上的块挪到  e 上面去
第  17 步: 把 t 顶上的块挪到  s 上面去
第  18 步: 把 t 顶上的块挪到  e 上面去
第  19 步: 把 s 顶上的块挪到  e 上面去
第  20 步: 把 t 顶上的块挪到  s 上面去
第  21 步: 把 e 顶上的块挪到  t 上面去
第  22 步: 把 e 顶上的块挪到  s 上面去
第  23 步: 把 t 顶上的块挪到  s 上面去
第  24 步: 把 t 顶上的块挪到  e 上面去
第  25 步: 把 s 顶上的块挪到  e 上面去
第  26 步: 把 s 顶上的块挪到  t 上面去
第  27 步: 把 e 顶上的块挪到  t 上面去
第  28 步: 把 s 顶上的块挪到  e 上面去
第  29 步: 把 t 顶上的块挪到  s 上面去
第  30 步: 把 t 顶上的块挪到  e 上面去
第  31 步: 把 s 顶上的块挪到  e 上面去

 

转载于:https://my.oschina.net/u/3464640/blog/1492417

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值