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

  • 汉诺塔问题
    • 步骤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. 【学习参考】Animate.css动画演示
  2. 面试题收集——Java基础部分(一)
  3. 本周四直播预告(内含福利)丨 经典知识库:MGR原理介绍与案例分享
  4. leetcode954. Array of Doubled Pairs
  5. Java多线程同步数据库,源码+原理+手写框架
  6. 计算机获得超级管理员,怎么获得Win7超级管理员权限
  7. 查询和01号学生学习的课程完全相同的其他同学的信息
  8. 系统重装计算机硬件不兼容,升级Win10系统出现兼容性报告详细解答
  9. vb中Msgbox函数的应用。
  10. 基于Java+SpringBoot+Thymeleaf+Mysql校园运动场地预约系统设计与实现
  11. Edge浏览器开启下载提速
  12. AES解密失败 WxMaCryptUtils.decrypt(sessionKey,encryptedData, iv)
  13. cad展点kszd小程序_cad实现批量展坐标点方法介绍
  14. SQL 内连接、左连接、右连接案例
  15. T-SQL中删除语句区别 - 转自: 搜搜问问
  16. 互联网人每天要面对多少变态需求?
  17. wifi6路由器怎么选?这款实力超群可做首选
  18. 【软考系统架构设计师】2013年下系统架构师综合知识历年真题
  19. 腾讯T2亲自讲解!如何才能更容易拿到大厂Offer?年薪50W
  20. firefox火狐浏览器设置老板键

热门文章

  1. 把 Notepad++ 打造成一款易用的C#脚本编辑器
  2. 基于网页的个人音乐播放器系统 毕业设计毕设源码
  3. 电动车头盔检测数据集
  4. 第十章 client windows程序设计王艳平版
  5. css 3D 简单实践
  6. 【限速标志识别】基于matlab GUI形态学限速标志识别【含Matlab源码 1142期】
  7. POJ 2027 No Brainer(水~)
  8. 20道JavaScript经典面试题
  9. matlab仿真建立机器臂模型并得到其D-H参数表
  10. 大数据系统计算的概念全面解析