汉诺塔介绍

汉诺塔简单介绍:

有三根相邻的柱子,假定从左到右为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

递归的移动思路

将圆盘的移动分解看作三步:

第一步:

将最下面最大圆盘的上面所有圆盘视作n-1个圆盘,需要从借助C柱移动到B柱上

第二步:

将最大的圆盘移动到C柱上

第三步:

将n-1个圆盘借助A柱移动到C柱上

代码实现

count = 0

def hanoi(n, a, b, c):

global count

if n > 0:

hanoi(n - 1, a, c, b)

print(f'移动 {a} 到 {c}')

count += 1

hanoi(n - 1, b, a, c)

hanoi(4, 'A', 'B', 'C')

print(f"一共移动{count}步")

假设只有4个圆盘

运行的结果为:

移动 A 到 B

移动 A 到 C

移动 B 到 C

移动 A 到 B

移动 C 到 A

移动 C 到 B

移动 A 到 B

移动 A 到 C

移动 B 到 C

移动 B 到 A

移动 C 到 A

移动 B 到 C

移动 A 到 B

移动 A 到 C

移动 B 到 C

一共移动15步

汉诺塔递归图解:

首先调用函数Hanoi(4,A,B,C)判断N>0之后,继续调用Hanoi(3,A,C,B),然后继续判断N>0再进入Hanoi(2,A,B,C),之后再进入Hanoi(1,A,C,B),因为判断完大于0之后,再调用Hanoi的时候,变成Hanoi(0,A,B,C),此时N为0,不会再进行递归了,就会跳出到Hanoi(1,A,C,B)下执行print打印[从A移动到B],执行完之后就会再跳出到Hanoi(2,A,B,C)函数的print打印 [从A移动到C] ,之后执行Hanoi(1,B,A,C),然后打印从B移动到C。此时Hanoi(2,A,B,C)执行完毕跳到Hanoi(3,A,C,B)这一层继续向下执行print打印从A移动到B。

以此类推一直到最后,程序中打印的内容用在结构图中用黄色高亮标出来了。然后标注了从Hanoi(4,A,B,C)一直到Hanoi(3,A,C,B)执行的顺序。

可以通过画图深入理解递归,和汉诺塔的递归结构。

汉诺塔递归算法python详细解析图_汉诺塔递归算法的图解(自我总结)相关推荐

  1. python代码做图_如何用Python代码制作图

    Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. 图是一 ...

  2. python可以p图_用Python来P图!简直耍开PS几条街!

    写在前面 PS作为世界四大发明之一可以说被广大网友用到了极致,只有你想不到的没有我P不了的,任何正经的图片在都可以变成搞笑图片(比如下图)当然也可以用ps做一点正经的事情. 作为一个爱折腾的程序猿能用 ...

  3. python画平行坐标图_[宜配屋]听图阁

    平行坐标图,一种数据可视化的方式.以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以不同颜色区分类别. 但是很可惜,才疏学浅,没办法在Pytho ...

  4. python画漏斗图_只需简单几步,教你用python完成漏斗图的绘制

    商业分析中经常会用到漏斗图.尤其是在网站流量监控.电商商品转化等一些数据运营方面.漏斗图之所以是漏斗就就是倒三角的形状,是因为用户或者流量,集中从某个功能点进入,很大可能会按照产品本身设定的流程来完成 ...

  5. 汉仪尚巍手书有版权吗_汉仪尚巍手书字体下载 汉仪尚巍手书体W字体免费版下载...

    手写书法字体小编已经发布过很多了,今天发布的这款汉仪尚巍手书字体是由汉仪字库出品的一套手写书法字体,比较完整,个人使用免费,如果用于商业用途需要联系汉仪官方获取授权,适用于标题.印刷.包装.电商使用. ...

  6. 汉诺塔递归python搬运次数_Python3.x | 汉诺塔递归理解

    在刚学廖雪峰廖大佬的python3教程中的递归时,前面的内容理解都觉得还行,到了做汉诺塔的练习时会觉得有些发懵,后面多看几遍和练习后也就理解了. 因为遇到有人在问这个问题咋理解,因此写下我的想法,希望 ...

  7. python递归面试题_汉诺塔问题其实很简单 Python 递归经典面试题

    话不多说,上代码 1 def hanoi_move(n, source, dest, intermediate): 2 if n >= 1: # 递归出口,只剩一个盘子 3 hanoi_move ...

  8. 力扣-第104题--二叉树的最大深度(python)--详细解析--逐步调试

    给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 递归法: 解题思路: 1.首先判断根目录是否为空节点,如果是,返回0 ...

  9. python时间序列动图_手把手教你用Python进行时间序列分解和预测

    来源:数据派THU(ID:DatapiTHU) ▔ 作者:Mohit Sharma 翻译:王闯(Chuck) 校对:王可汗 预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃.时间序列预测 ...

  10. python导出dxf图_在PDMS中使用python直接生成管口方位图(开源分享第三集)

    在PDMS中使用python直接生成管口方位图(开源分享第三集) 距离上一次发推送已有5个月之久,上周立了冬,这二季我为五斗米折了腰,最近才缓过气来. 令我没想到的是,大家竟然对这个主题这么有兴趣,有 ...

最新文章

  1. Servlet Listener
  2. NPTL简介 (NATIVE POSIX Thread Library)
  3. 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务
  4. Web应用程序安全性:战斗自己或寻找理智的边缘
  5. spring mvc学习(28):get乱码解决
  6. 非大学生学计算机,浅谈非计算机专业大学生的计算机教学
  7. laravel 集成采集_新版2020 Laravel采集网站程序
  8. Elasticsearch之中文分词器插件es-ik(博主推荐)
  9. CDH页面配置HA(高可用)
  10. 机器学习基础(三十六)—— 非规整数据(值缺失、异常值)的处理
  11. 芝加哥计算机科学硕士录取难度,美国cs研究生申请难度有多大?
  12. Git配置KDiff3
  13. Linux基础命令---lp打印文件
  14. 微信小程序 中使用三元运算符
  15. Elasticsearch-8.4.2 集群安装
  16. GOM登录器配置免费生成图文教程
  17. 怎么删除电脑服务器远程桌面连接,删除远程桌面服务客户端访问许可证
  18. 后期处理体积-电影校色
  19. Python基本语法,让我们轻松入门学习Python!
  20. Qt的主窗口背景设置

热门文章

  1. 常用命令大全(网络命令+关机重启命令)
  2. 程序员记录之人性弱点
  3. U盘中毒文件被隐藏?U盘中毒了怎么恢复文件
  4. 【设计模式】简单工厂模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  5. 金蝶K3系统定制国际销售日报表
  6. 小米android11账号补丁,小米CC9E MIUI11 安卓9 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  7. nginx常用配置模板
  8. 摸爬滚打DirectX11_day08——.X文件的导入
  9. c++项目开发——吃豆子游戏
  10. 证明一维热传导方程为抛物型方程