简单地介绍题目

点进来的各位其实也应该不陌生了,三根柱子,N个圆盘,要求把所有的圆盘从第一根柱子放到第三根上,并且编号下面的圆盘不能放在编号上的圆盘上。这个问题其实知乎上有很多答主都答得不错,这里我想分析一下自己的一些收获。

如何理解hanoi的逻辑

我们都知道,hanoi塔在计算机语言中是一种递归的逻辑。

很多人在关注这种递归的时候往往喜欢一步一步的追踪,以此来弄明白它的内层逻辑,简单地说,就是顺藤摸瓜,一步步推。

但是要想简单快速的理解递归,这种方式是不提倡的。比如这题,O(2*n)的复杂度,4个盘子就够呛。

因为递归本身就是把具体的分析交给计算机去做,程序员只提供解决问题的思路。

递归的要素应该是每一步的思路,以及终止条件的判断。就像物理中,我们只关心物体的速度变化以及停止运动的时间,因为知道这些就可以求出每一时刻物体的位置。

有人说,要相信数学归纳法,我觉得很有道理,因为递归本质上核心就是数学归纳法。

回到正题,hanoi问题,其实可以简化。既然以递归的模式来思考,那就一开始就假设你要移动n个盘子(n是一个比较大的数字),不要去思考前n-1个盘子的具体解决问题,因为你是在递归,只思考过程,不考虑细节。

既然不考虑前n-1个盘子具体怎么移,那我们就可以简单的把它看作一个整体(反正你具体怎么移都不关我事),这个时候你会发现盘子居然只有两个了!

设前n-1个盘子“合成”的大盘子每移动一次消耗a次移动次数,接下来可以很容易的得出一个推论(真相只有一个):

sum=2*a+1;

也就是说,移动第n个盘子只需要把前n-1个盘子移动两次,自己移动一次。

递推逻辑get!

终止条件就简单了,因为所有的递归都是循环,在理解这一步逻辑之后你甚至可以用循环来写。

无非就是从第一个盘子求到第n个盘子嘛~

反手就是一个for循环
sum=1;
for(int i=2;i<=n;i++)
{
sum=2*sum+1;
}

很简单嘛,递归也是同样的道理,从第一个递归到最后一个盘子就结束。

所以当你把每一步的递归逻辑吃透之后,就会很简单。你看,如果不用这种方式,即使只有5个盘子,你要遍历它也得花费不少的时间,而且对解题来说,不理解递归逻辑,就算一层一层推也没有什么帮助。

当然,我也不是全屏否定这种方式,因为它可以帮助我们快速理解一些逻辑,但是解题时,更多还是需要我们去尝试,跳过简单的推导,直接尝试去找程序的逻辑,而不是某一步的结果,这样我们才能更快的解决问题。

总结:hanoi这类的问题有无数个,但是我们解题的核心其实是有相似点的,这种解题收获才是我们刷题的关键。

这就是我从hanoi问题中得到的一些启发吧,希望能够帮到自己,也希望能帮到你们。

个人心得——hanoi问题 汉诺塔问题详细分析相关推荐

  1. Hanoi Tower 汉诺塔的简单分析/C

    当然.这是一个经典的递归问题~    想必来看这篇博文的同学对汉诺塔应该不会陌生了吧, 写这篇博还是有初衷的: 之前学数据结构的时候自己看书.也上网上查了很多资料,资料都比较散.而且描述的不是很清楚, ...

  2. 汉诺塔问题详细解析zufeoj

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

  3. Tower of Hanoi(汉诺塔)详解

    一个经典的汉诺塔问题,带着我自己的理解给做这个问题的友友们解决一下,包括我本人在做的时候也遇到的一些问题给大家阐述一下.话不多说,来看: 汉诺塔 问题描述: 汉诺塔(Hanoi Tower),又称河内 ...

  4. 【PE806】Nim on Towers of Hanoi(汉诺塔游戏,生成函数)

    PE:Project Euler 题意: 汉诺塔游戏是如下的问题:有三根柱子,第一根柱子套有 n n n 个圆盘,圆盘从上往下半径递增.每次操作可以把套在某根柱子上的最上面的那个圆盘移到另一个柱子上. ...

  5. 汉诺塔算法 c语言实验报告,C语言汉诺塔算法原理分析与实践

    汉诺塔游戏的规则:如下图所示,有三个柱子A,B,C,我们要做的是把A柱的所有圆盘,全部转移到C柱上,转移时遵循的规则如下: 1.每次只能移动一个圆盘 2.所有的大圆盘必须在小圆盘的下面 首先假设只有一 ...

  6. 汉诺塔的详细大白话讲解,助你攻下这座山头

    有趣的问题: 汉诺塔是一个比较抽象的问题,一定要去理解这个问题才能领略其中的奥妙: 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金 ...

  7. 使用Python查看汉诺塔移动详细过程

    汉诺塔属于比较经典的问题,详见以前的文章Python模拟汉诺塔问题移动盘子的过程,基于非递归算法的汉诺塔游戏之Python实现. 本文代码功能:模拟移动汉诺塔上的盘子,并实时显示3根柱子上盘子的情况. ...

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

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

  9. Strange Towers of Hanoi 汉诺塔问题及其升级(递推)四个汉诺塔问题

    今天学习递推的汉诺塔问题,非常的有趣 文章目录 1.汉诺塔问题来源 分析 2.Strange Towers of Hanoi[DP][递推] 题目大意: 思考 解题步骤: 1.汉诺塔问题来源 汉诺塔( ...

最新文章

  1. 编写高质量JavaScript代码的基本技巧
  2. [团队公告]第二次技术交流主题征集
  3. 天平应什么放置_天平是否应该放干燥剂?
  4. dotnetcore+vue+elementUI 前后端分离 三(前端篇)
  5. mysql查找最高分最低分_sql查询最高分、最低分和平均分语句
  6. 一、数据预处理——数据归一化 数据标准化
  7. android 运行jquery,Android端JQueryMobile使用教程(一)
  8. 华为FreeBuds 3耳机更新推送:新增支持骨声纹识别特征
  9. python写安卓app控制蓝牙_Python脚本利用adb进行手机控制的方法
  10. jquery 如何插入元素
  11. ICLR2020 双盲审稿资质雪崩:47%审稿人在领域内没发过论文,8分论文你也能审!...
  12. CentOS7 设置IP、源、SSH密钥登录、自动补全、防火墙
  13. js时间对象相关函数
  14. web border属性
  15. 年度回顾:短视频大逃杀
  16. 【第16周复盘】学习的飞轮
  17. 北京大学创业训练营专家讲座:创新大师乔布斯的创业理念与营销哲学
  18. 红帽子Linux7安装Oracle,RedHat Enterprise Linux7.0安装Oracle 12C
  19. html5 canvas背景特效,HTML5 Canvas炫酷背景动画特效
  20. debussy和modelsim联合仿真配置

热门文章

  1. js实现数据结构--队列
  2. 元宇宙中的情绪与情感探索在军事上的应用
  3. Vsync 来龙去脉
  4. android vsync,Android 显示系统:Vsync机制
  5. C语言中的字符与字符串库函数的使用以及模拟实现
  6. Vue : 无法加载文件 E:\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microso ft.com/fwlink/
  7. java 300dpi_使用java imageio 调整图片DPI,例如从72调整为300
  8. dbKoda连接mongodb出现ConnectNamedPipe Failed错误
  9. Word Ladder
  10. 过年春联不可少,python带你制作春联,体验不一样的过年氛围