还记得大一的时候在两个学长的帮助下,琢磨了几天才把这个汉若塔递归的程序看懂,琢磨清白。
现在大二了,花了5,6个小时才把他写出来。真的没感觉到进步,特别是今天发现好多东西都忘了,当推出这个递归的时候ztm尴尬,这么容易还推了这么久,不应该早就推出来了吗?汗。不说闲话直接分析了;

1;关于汉若塔;

将其具体问题化;
假设有3个分别命名为X,Y,Z的塔座,在塔座X上插有n个直径大小各不相同,依小到大编号为1,2,3,4,,,n的圆盘,现在要求将X抽的n个圆盘移至塔座Z上并且仍然按同样的顺序叠加,圆盘移动时须遵循一下规则;
1;每次只能移动一个圆盘,
2;圆盘可以插在X,Y,Z中的任意一个塔座。
3;任何时候都不能将一个较大的圆盘压在较小的圆盘之上;

这里假设,小的标号1号,大的为n号,因此要始终满足小号在上;

2;关于其思维;
1,——将压在编号为n的圆盘之上的n-1个盘从台座X——借助Z台座——移至Y上,
2——将编号n的圆盘直接从X移至Z;
3——再将在Y台座的n-1个盘——借助X台座——移至Z塔座

3;先看怎么读懂程序吧;

怎么根据这程序就可以实现汉若塔的移动呢?

其中123步骤就是上面2中的三点;

1,——将压在编号为n的圆盘之上的n-1个盘从台座X——借助Z台座——移至Y上,
2——将编号n的圆盘直接从X移至Z;
3——再将在Y台座的n-1个盘——借助X台座——移至Z塔座

你可以将代码运行一下,可以得到其运行结果就是图片标号的结果;
然后再在纸上模拟一遍就差不多读懂这个程序了,但是怎么不看程序,当做没了了解过这个代码来自己相出这样的递归呢;

4;怎样写出递归
还是根据第二点的思维;只是再添加一点东西;

1,——将压在编号为n的圆盘之上的n-1个盘从台座X——借助Z台座——移至Y上,
2——将编号n的圆盘直接从X移至Z;
3——再将在Y台座的n-1个盘——借助X台座——移至Z塔座

它是只宏观的说了要怎样做,但具体就没说了,我们要实现就是要具体的都要搞清楚,这个搞清楚了那么代码也就不远了。
其实那是那样的思路,只是将其微分化;
例如1步骤——上面的n个,就是1到n-1;下部呢,就是继续化,继续化成3步,只是之前的n变成了n-1,不断的划分知道n=1结束;
3步骤也是一样的,这样就具体化了吧?
为什么可以这样划分,因为移动的规则就是满足大直径的在上面即可;我们这样将n-1个分成n-2个只是将相对最小的那个先不考虑,但是那个相对而言是大的,也就是可以放到台座下面,不用管上面是怎样移动的,因为上面的圆盘始终会小于这个瓜分出来的。

关于汉若塔的实现就到这里了;其实这个还有很多拓展,下次遇到再补上‘
1;n个盘最少移动2的n次方-1步就可以完成;

哈哈;又到深夜,又是开热点来发博客,睡觉。下次应该不会再把这个忘了吧。哈哈;

汉若塔递归(读懂递归和写出递归)相关推荐

  1. 个盘子的汉诺塔需要移动几步_坨——理解递归实现quot;汉诺塔quot;代码的关键...

    我记得,大学学C语言时,在函数递归调用那一节有个作业,就是写汉诺塔.不少同学遭遇到困难.在知乎上遇见的就有: 如何理解汉诺塔的递归?​www.zhihu.com 题主发出悲鸣:"--学C++ ...

  2. c语言递归求塔移动次数,【C语言】Hanoi(汉诺)塔问题,求移动盘子的步骤(递归法)...

    所有的循环算法都可以用递归实现,反之不成立,这足以证明递归的重要性! Hanoi(汉诺)塔问题.古代有一个焚塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在上,小的在下,有一 ...

  3. 四柱子汉诺塔c语言程序代码,汉诺塔n=4(4个盘)c语言递归编程代码

    满意答案 /**************************** 汉诺塔的算法就3个步骤: 第一,把a上的n-1个盘通过c移动到b. 第二,把a上的最下面的盘移到c.a成了空的. 第三,因为n-1 ...

  4. 关于读懂时序图写时序

    我们知道,时序图分为理想时序图和实际工作时序图.理想时序忽略了实际高低电平转换时间,而我们实际写程序过程中更希望看到的是实际工作时序图,更清晰明确. 图1 理想时序与实际时序 物理时序图只要保持操作顺 ...

  5. 彻底解决汉诺塔问题——递归算法

    关于递归: 一定不要试图跟踪大型递归的过程! 要写出递归,关键就是找出递归的递归方程式: 也就是说,要完成最后一步,那么最后一步的前一步要做什么. 1)在求f(n, other variables)的 ...

  6. 汉诺塔问题c++递归解法

    ​汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆 ...

  7. Python 算法之递归与尾递归,斐波那契数列以及汉诺塔的实现

    文章目录 递归概念 递归要素 递归与迭代的区别 示例一:阶乘 示例二:斐波那契数列 示例三:汉诺塔问题 尾递归 Python 中尾递归的解决方案 递归概念 递归:程序调用自身的编程技巧称为递归( re ...

  8. 【汉诺塔】C语言递归解法,深层次地带你理解汉诺塔公式

    目录 汉诺塔公式 汉诺塔问题在数学层面的公式: C语言递归公式 两层汉诺塔 三层汉诺塔 递归问题可谓是学习C语言以来的第一个拦路虎,而汉诺塔问题更是递归中对新手很不友好的一道经典题,我们接下来从公式角 ...

  9. 汉诺塔递归调用(C语言实现)有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘

    什么是汉诺塔呢:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按 ...

最新文章

  1. 如何利用报表工具FineReport实现报表列的动态展示
  2. 2021-04-28 Python可视化图表生成-Matplotlib绘图
  3. 【Pygame小游戏】这款休闲游戏你肯定了解过《开心消消乐》更新版本上线,好土好喜欢
  4. currenthashmap扩容原理_高并发编程系列:深入探讨ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)...
  5. C++的四种强制类型转换
  6. 服务治理之Eureka--基本介绍
  7. zynq中interrupts的学习笔记(一)
  8. cocos2d-X   CCSprite设置贴图(图片)大小
  9. 【原生JS】web原生文字轮播效果
  10. 什么是探索性测试?探索性测试有哪些方法?
  11. markdown使用文档(Typora 快捷键)
  12. 经历了6面,终于入职蚂蚁金服
  13. Dockerfile中ADD文件用法
  14. vue 前端仿QQ截图实现Web端自定义截屏(JS版)
  15. android 移除子view,android-从父视图中移除视图与隐藏视图
  16. Wrapper中的QueryWrapper常用ge,gt,lt,le具体含义
  17. ElasticSearch 参数调优
  18. python 儿童 游戏_python程序:两个小孩玩剪刀石头布游戏,一人十分,赢一次得一分,输一次减一分,平手不扣分,当没...
  19. PHP implode()函数
  20. 'CC_MD5' is invalid in C99”

热门文章

  1. 爬虫中的User-Agent和IP代理
  2. php中生成灯泡 代码怎么写,PS教程之在灯泡中加入灯丝文字
  3. 数字孪生之Plant Simulation工厂仿真分析
  4. 阵列卡u盘安装系统步骤_如何为U盘装系统添加RAID卡的驱动
  5. dwg怎么转换成html,如何将dwg格式转换为dat格式.doc
  6. 学习笔记-基于全局和局部对比自监督学习的高分辨率遥感图像语义分割-day2
  7. m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
  8. html音乐自动播放暂停js,JS实现html页面切换背景音乐不间断网页跳转背景音乐不停止播放...
  9. MFC基于对话框添加图片控件
  10. 岚宝科技甲醛(HCHO)传感器驱动程序