汉诺塔问题(Hanoi Tower):Python实现并显示递归过程

汉诺塔为递归经典题目,代码实现方面的网上资源很多。作者初学Python以及数据结构,试图通过跟踪程序运行步骤,详细理解其递归的过程。因此着重就每一步的运行结果,进行了一些输出(print)跟踪。供大家参考,欢迎高手指点。

本段代码运行后,可以显示递归过程中,类似树状的递归/遍历过程,对作者本人的理解很有帮助。其中,对hanoi(参数1, 参数2, 参数3, 参数4)的4个参数顺序,及其在不同递归层级的作用的认定,是理解递归过程的关键。详见代码底部附注。

Python代码如下:

def move_peg(n, s1, s3):        #盘子移动及打印显示
   
    global counter 
    
    s3.append(s1.pop())         #移动盘子
    
    counter += 1
    print("第%2d步:" % counter, end=' ')
    print('n=', n, '\t'*(tab_len - n), S, '\n')


def hanoi(n, s1, s2, s3):       #将 n 个盘子从 s1 移至 s3, 以 s2 做为过渡柱
    
    if n == 1:
        move_peg(n, s1, s3)     
        
    else:
        hanoi(n-1, s1, s3, s2)  #步骤1:将s1最上面的n-1个盘子移至s2, s3为过渡柱
        move_peg(n,s1,s3)       #步骤2:如s1中只剩一个盘子, 移动其至s3      
        hanoi(n-1, s2, 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值