图解 汉诺塔递归算法

题目:

---

(如果看过N次的就不用看了 直接跳到题解)

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi

Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

题解

--

当盘子只有1个

-------

![1.png][1]

还是老规矩如果只有一个盘就从**起始点**直接移动到**目标点 就算完成**

![2.png][2]

当盘子有2个

------

![3.png][3]

第一步、首先要把第1个盘子移动到**过渡点**,才能把第2个盘子移动到**目标点**。

![4.png][4]

第二步、可以调动第2个盘子移动到**目标点**。

![5.png][5]

第三步、把**过度点**上的盘子移动到**目标点**就完成了。

![6.png][6]

----------

高能预警!!!!

当盘子有2个以上

--------

![7.png][7]

其实和之前2个盘子一样,“就三步”

可以把3个盘子分成两部分

N和N-1

![8.png][8]

第一步、把第N-1 移动到**过度点** 至于为什么可以这样移动你先不管(先把这个概念理解,后面就详解) 你就当第1个盘子和第2个盘子合成一个盘子了

![9.png][9]

第二步、把第N个盘子移动到 **目标点**

![10.png][10]

第三步、把“N-1” 这个 “二合一” 的盘子移动到**目标点**就好

![11.png][11]

开始详解为什么可以把“N-1” 第1个盘和第2个盘这样移动

首先想把 第1个盘和第2个盘移动到**中间的柱子**就需要改变一样东西。

把中间的柱子当成 **目标点** **第3根柱子**便成为 **过渡点**

![12.png][12]

可以参考只有2个盘子的步骤思考一下,盘子是如何从**起始点**移动到**目标点**

聪明的你 我想应该已经猜到,还是那3步。

1、起始点->过渡点

2、起始点->目标点

3、过渡点->目标点

![13.png][13]

![14.png][14]

![15.png][15]

现在知道"N-1" 那个盘子为什么可以把当成两个盘子移动了吧。

其实就是一个递归思想,好了我们**最终的目标是3个盘子**都移动到**第3根柱子**

还原上一个“状态” 第3根柱子才是真正的**目标点**

![16.png][16]

这下子要把第3个盘子移动到 **目标点**了

![17.png][17]

**我们就剩一步了**

思考一下 如何把**过渡点**的所有盘子移动到**目标点**

其实怎么都逃不过那“三部曲” 只是把起始点、过渡点、目标点调换了。

1、起始点->过渡点

2、起始点->目标点

3、过渡点->目标点

因为从第2根柱子移动到**目标点** 我就让他成为**起始点** 然后我们需要一根柱子借助移动,然而第三根已经有“名称了" 只能委屈”第一根柱子“成为**过渡点**

看好了 "三部曲又来了" 不过多少个盘子都还是逃不过这个。

![19.png][18]

![20.png][19]

![21.png][20]

代码示例:

    #include<iostream>

    #include<algorithm>

    using namespace std;

    void Hanoi(int n,char A,char B,char C)

    {

    if (n == 1) /*当盘子为一个时候 直接把A到C的步骤打印出来就好*/

    cout << A << "->" << C<<endl;

    else{

               /*否则把起始点 过度点 目标点 互换*/

    Hanoi(n - 1, A, C, B);

    cout << A << "->" << C<<endl;

    Hanoi(n - 1, B, A, C);

        }

    }

    int main()

    {

    Hanoi(1, 'a', 'b', 'c');

    }

  [1]: https://www.error0.cn/usr/uploads/2019/08/2651571985.png#vwid=891&vhei=599

  [2]: https://www.error0.cn/usr/uploads/2019/08/3824027137.png#vwid=670&vhei=258

  [3]: https://www.error0.cn/usr/uploads/2019/08/1948404942.png#vwid=766&vhei=441

  [4]: https://www.error0.cn/usr/uploads/2019/08/1633572087.png#vwid=821&vhei=328

  [5]: https://www.error0.cn/usr/uploads/2019/08/1321876052.png#vwid=785&vhei=298

  [6]: https://www.error0.cn/usr/uploads/2019/08/2214261088.png#vwid=772&vhei=327

  [7]: https://www.error0.cn/usr/uploads/2019/08/2144532120.png#vwid=793&vhei=452

  [8]: https://www.error0.cn/usr/uploads/2019/08/902574807.png#vwid=771&vhei=290

  [9]: https://www.error0.cn/usr/uploads/2019/08/2395366544.png#vwid=771&vhei=323

  [10]: https://www.error0.cn/usr/uploads/2019/08/3026448051.png#vwid=820&vhei=322

  [11]: https://www.error0.cn/usr/uploads/2019/08/59515827.png#vwid=878&vhei=323

  [12]: https://www.error0.cn/usr/uploads/2019/08/3866231852.png#vwid=828&vhei=295

  [13]: https://www.error0.cn/usr/uploads/2019/08/869872561.png#vwid=762&vhei=299

  [14]: https://www.error0.cn/usr/uploads/2019/08/1736937985.png#vwid=746&vhei=300

  [15]: https://www.error0.cn/usr/uploads/2019/08/3936818698.png#vwid=841&vhei=297

  [16]: https://www.error0.cn/usr/uploads/2019/08/4246376684.png#vwid=770&vhei=293

  [17]: https://www.error0.cn/usr/uploads/2019/08/1817414595.png#vwid=866&vhei=289

  [18]: https://www.error0.cn/usr/uploads/2019/08/304925758.png#vwid=849&vhei=323

  [19]: https://www.error0.cn/usr/uploads/2019/08/1445973870.png#vwid=836&vhei=311

  [20]: https://www.error0.cn/usr/uploads/2019/08/2205381653.png#vwid=852&vhei=306

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 每章一点正能量:人的一生可能燃烧也可能腐朽。 前言 相信大家在面试或者工作中偶尔会遇到递归算法的提问或者编程,我们...
    Coder编程阅读 1,436评论 0 2
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,389评论 0 17
  • 原文链接(转载请注明出处)汉诺塔的图解递归算法 起源 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大...
    Dmego阅读 1,537评论 0 0
  • 1-------- 走进前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥阅读 2,322评论 0 34
  • 递归介绍 本来预算此章节是继续写快速排序的,然而编写快速排序往往是递归来写的,并且递归可能不是那么好理解,于是就有...
    Java3y阅读 16,082评论 7 20