python基础入门——图解汉诺塔,用Python实现经典递归

(1)先从最简单的模型开始,假如A柱有2个盘,我们的任务是把这两个盘按照规则(小叠在大上)移到C柱。操作步骤如下所示:

在这里插入图片描述

(2)现在把原始时A柱盘子数增加到100,那步骤不言而喻变得很复杂,但是我们可以通过一种方法把复杂的问题简单化:

在这里插入图片描述

可能此时你会觉得什么!怎么可以直接把这一大块就这样移过来!我们可以把那一大块红色再次看为2一大块,让2成为最大的蓝色3~100成为红色

在这里插入图片描述

(3)以此类推到最顶部的10099的移动,也就是我们一开始,拿到一个汉诺塔会去做的一件事:

在这里插入图片描述

在完成第一个回合,及99100成功脱离黑色块,也就是上图的最后一步,我们再次把99100合体为新的红色块,与新的蓝色块——98开始新一回合的移动。以此类推下去,就最终完成全部盘子从A柱到另外的柱子。

(4)我们再次回到第一次只有两个对象的那张图,不过这一次,我们假设在A柱上我们有n个盘子,这时候,还是的移动——1n-1

在这里插入图片描述

我们把移动步骤都列举下来:

n-1 from A --> B

1from A --> C

n-1 from B --> C

(5)最后,我们通过创建一个move( )函数,来实现这一功能:

def move(n, a, b, c):
    if n == 1:
        print(a, '-->', c)
    else:
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)
a = input('请输入A柱盘子的个数:')
num = int(a)
print('把',num,'个盘子全部移到C柱子的顺序为:')
move(num, 'A', 'B', 'C')

 
 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

所谓递归函数,就是一个函数在内部调用其自身本身的函数。以上的move( )函数就是一个很经典的递归函数,在循环语句的else部分,通过不断地调用自己,完成移动。move( )函数中,总共有4个参数:n, a, b, c。当n==1时,由第2位参数 --> 第4位参数。因此else部分的函数其实表达的是a --> b; a --> c; b --> c,及是(4)中模型的移动步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值