Python数据结构与算法笔记(二):递归介绍及汉诺塔问题

递归

内容介绍

在这里插入图片描述
func1和func2没有结束条件。

图解func递归过程:
长框代表func3,窄框代表print。函数执行过程是从上至下。
在这里插入图片描述
长框代表func4,窄框代表print。函数执行过程是从上至下。
在这里插入图片描述
由此可见,两个函数的执行结果不一样。

汉诺塔问题

问题简介:
在这里插入图片描述
两个圆盘时的移动过程,由A到C:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当有n个盘子时,将上面n-1个盘子看成一个整体,把下面的盘子看成1.即将问题简化为两个盘子。
在这里插入图片描述
由于有n-1个盘子,所以要将n-1个盘子移动到B,必然要经过C。
在这里插入图片描述
在这里插入图片描述
只有第二步是移动1个盘子,其他的都是n-1的过程。比原问题规模小了1的问题,原问题递归的子问题。

# n-n个盘子
# abc-柱子
def hanoi(n,a,b,c):# 把n个盘子从a经过b移动到c
    if n > 0: # 递归终止条件,盘子数为0
        hanoi(n-1,a,c,b)# 把n-1个盘子从a经过c移动到b
        print("moving from %s to %s" %(a,c) )
        hanoi(n-1,b,a,c) 
hanoi(3,'A','B','C')
----------------------------
moving from A to C
moving from A to B
moving from C to B
moving from A to C
moving from B to A
moving from B to C
moving from A to C

第一步h(n-1),第二步1,第三步h(n-1)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值