图解汉诺塔(满屏幕都是图)

  • 汉诺塔问题
    • 步骤1:
    • 步骤2
    • 步骤3:
    • 技术总结

和很多人一样,我刚刚接触汉诺塔的时候,可能说是头晕目眩,立马放弃。
但如果用图形表示感觉会好很多。
以下是我的学习思路:

汉诺塔问题

首先。递归的思路是什么?
把复杂的问题简单化
这里有四层塔,我们要在大塔不压小塔的情况下,把塔从x移动到z。(灵魂手绘看得懂就行)

所以,我们需要写个函数来实现这一功能。 首先,我们知道这个函数一共包括四个参数:汉诺塔的层数、x、y、z(图中包括的四个信息)。我们暂时把这个函数写作:

f(n,x,y,z)f(n,x,y,z)f(n,x,y,z)
其中
nnn—汉诺塔层数
xxx—x轴
yyy—y轴
zzz—z轴

这个函数的功能是把n层汉诺塔从x移动到z,且中间要通过y。(当然这里的x、y、z都是形参,你传入什么就是什么,不代表图中的轴)
本着把复杂问题简单化的原则,每一个步骤都用一条语句实现。

步骤1:

这里我们把n-1从x移动到了y上,当然我们不能同时移动这么多层,所以形成这一局面一定要通过z。(是不是很熟悉,你想到了什么?……函数,是不是,可以返回去看看) 这里写出函数:

好的你完成了第一步。

步骤2

现在你可以愉快的把x轴上的一层塔移动到z轴上了!

步骤3:

把y轴上的n-1层塔移动到z轴上,通过x轴。

大功告成!
什么?没看懂!不着急,下面开始技术总结:

技术总结

当然有一种例外情况(也是递归出口),当n=1时,可以直接从x轴移动到z轴。

现在我们可以开始设计函数了:

好的现在开始写程序(我用的是c,函数名称叫:hanota)

#include <stdio.h>
void hanota(int n, char x, char y, char z)
{if (n == 1){printf("%c --> %c\n", x, z);}else{hanota(n - 1, x, z, y);hanota(1, x, y, z);hanota(n - 1, y, x, z);}
}int main(void)
{char x ='x';char y ='y';char z ='z';int n = 4;hanota(n, x, y, z);}
/*
结果输出:
x --> y
x --> z
y --> z
x --> y
z --> x
z --> y
x --> y
x --> z
y --> z
y --> x
z --> x
y --> z
x --> y
x --> z
y --> z*/

图解汉诺塔(满屏幕都是图)相关推荐

  1. 图解汉诺塔,用Python实现经典递归

    感谢漂流的云的图解汉诺塔问题(递归求解) (1)先从最简单的模型开始,假如A柱有2个盘,我们的任务是把这两个盘按照规则(小叠在大上)移到C柱.操作步骤如下所示: (2)现在把原始时A柱盘子数增加到10 ...

  2. 【问题描述】汉诺塔问题大家都清楚,这里不再赘述。

    [问题描述] 汉诺塔问题大家都清楚,这里不再赘述.,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪ ...

  3. 个盘子的汉诺塔需要移动几步_图解汉诺塔问题( Java 递归实现)

    汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...

  4. 图解汉诺塔问题(递归求解)

    汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子 ...

  5. 算法:图解汉诺塔问题(递归求解)

    汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子 ...

  6. 汉诺塔c语言源程序步骤,汉诺塔问题的算法分析及C语言演示程序的实现

    摘要:该文对经典的"汉诺塔"问题进行了详细的分析,并用C语言实现.通过问题的具体实现,使学习者了解问题的全过程,推广到一般. 关键词:汉诺塔;递归;C语言 中图分类号:TP301. ...

  7. 汉诺塔自动解题动画中的iOS开发技巧

    引 前段时间做了一道题,要求实现汉诺塔游戏的自动解题动画: 汉诺塔游戏应该都了解规则: 1.将盘子全部移动到塔C 2.每次只能移动一个圆盘: 3.大盘不能叠在小盘上面. 要求由用户输入盘子的数量,绘制 ...

  8. 算法 - 递归实现汉诺塔(The Tower of Hanoi)

    目录 引言: 分析: 分析两片汉诺塔的迁移过程: 分析三片汉诺塔的迁移过程: 代码实现: 递归出口: 递归过程: 完整程序代码: 运行结果: 参考资料:​​​​​ 引言: 今天接触到了一个非常有意思的 ...

  9. 汉诺塔之添加移动编号

    目录 前言 方法一:(简单粗暴) 方法二:(简化上面的思路) 后记 前言 代码风格不好,也是第一次写博客,还请大佬们谅解,有简便写法希望不吝赐教 搜了很久发现大佬们汉诺塔写的都很好,也清楚,但是有一道 ...

最新文章

  1. 实战:OpenVINO+OpenCV 文本检测与识别
  2. 微服务失败的11个原因
  3. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API
  4. spawn-fcgi启动的一些报错问题
  5. bootstraptable获得所有行_郎酒领衔,2020“川酒全国行”首站香满花城
  6. Spring Cloud alibaba版本对应
  7. 【转】C#实现SM3国密加密
  8. ubuntu系统下Java环境JDK的安装
  9. mysqldump的几个主要选项探究
  10. 范数与L1损失(MAE)、L2损失(MSE)的关系
  11. mysql 40014无效_Oracle 问题-ORA-14400: 插入的分区关键字未映射到任何分区
  12. 通过端口映射突破防火墙
  13. opencv-api SIFT_create()
  14. 深度学习主流框架介绍(PyTorch、TensorFlow、Keras、Caffe、Theano、MXNET)
  15. 马斯克一说特斯拉“全自动驾驶”,大家就想笑
  16. 姆巴佩独造三球一战成名 阿里云打破世界杯流量纪录
  17. dao层如何调用对象_如何实现DBCP数据库连接池工具类&mvc分层开发web流程操作?...
  18. 【2019杭电多校第二场1009=HDU6599】I Love Palindrome String(回文树的fail树)
  19. 图解概率论基础概念(条件概率、全概率公式、贝叶斯公式)
  20. OutMan——Foundation框架中的集合类(三)

热门文章

  1. android租车管理系统,毕业设计(论文)-基于Android的学校租车管理系统的设计与开发.doc...
  2. 第二阶段 筑基期(4-6 周,每周 8-10 小时)- 1
  3. 程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍
  4. 微信秒剪是什么意思 微信秒剪怎么剪辑视频发微信朋友圈
  5. Ubuntu 18.04 安装 fcitx 中文输入法
  6. #acm#No Brainer
  7. vsan双主机配置_VSphere Vsan的硬件要求
  8. virtuoso如何打开matlab,Virtuoso AMS Designer Virtuoso XL Layout Editor培训(Cadence)
  9. Activiti工作流开发笔记(二)-在线流程设计的使用说明
  10. JavaScript中开关灯案例展示