python算法+数据结构—递归(汉诺塔问题)

递归是算法的经典方法,他主要有两个特点:1.调用自身。2.结束条件。这两个条件缺一不可。
给大家举几个例子:
在这里插入图片描述
第一个不满足递归:既没有调用自身,也没有结束条件。
第二个满足递归:调用自身func3(x-1),结束条件(x-1)直到x<0
第三个满足递归:调用自身func2(x+1),但是没有结束条件(x+1始终大于0不会结束)
第四个满足递归:大家自己想想为什么
大家简单了解递归后,咱们来看一个递归的经典问题——汉诺塔问题
在这里插入图片描述
主要的问题就是将所有盘子,从A移动到C,在小圆盘上不能放大圆盘,每次只能移动一个盘子。
咱们设盘子的个数为n,首先当n=2时,
在这里插入图片描述
先将最顶上的盘子移动到B,再将最底下的大盘子移动到C
在这里插入图片描述
最后将B中盘子移动到C
在这里插入图片描述
这就是汉诺塔问题最基本的步骤,现在有n个盘子,咱们继续按这个思路分析
在这里插入图片描述
将最上面的n-1个盘子视为一个整体,先将n-1个盘子从A经过C移动到B(经过C的意思是,n-1个盘子每次移动一个,直到移动到B肯定会经过C)代码表示:hanoi(n-1,A,C,B)
再将第n个盘子从A移动到C,代码表示print(“moving from %s to %s”%(A,C))(因为一个盘子,一步,不需要调用本身)
最后将n-1个盘子从B经过A移动到C代码表示:hanoi(n-1,B,A,C)
汉诺塔问题就解决了

def hanoi(n,A,B,C):
    if n >0:
        hanoi(n-1,A,C,B)
        print("moving from %s to %s"%(A,C))
        hanoi(n-1,B,A,C)
hanoi(3,'a','b','c')#n=3时

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2019.09.04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值