美文网首页
通过递归解决汉诺塔问题

通过递归解决汉诺塔问题

作者: 金融测试民工 | 来源:发表于2020-04-02 22:24 被阅读0次

    汉诺塔(Tower of Hanoi)问题源于印度传说,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。                      

汉诺塔问题

    我们可以使用递归思路分解汉诺塔问题,例如我们有5个盘子在1柱需要挪到3柱,那只需要把4个盘子挪到2柱,最大盘子挪到3柱问题就解决了,把2柱的4个盘子移到3柱上就完成移动。

    接下来就是想怎么把4个盘子从1柱挪到2柱,同样是想办法把上面3个盘子挪到3柱,把剩下的最大盘子从1挪到2柱,再用同样的方法把3个盘子从3挪到2柱。同理,3个、2个盘子也是这么移动。基本的结束条件就是1个盘子的移动问题

    通过分治策略逻辑分三步:

1、首先将上层N-1个盘片从开始柱,经由目标柱移到中间柱

2、然后将第N个(最大的)盘,从开始柱移到目标柱

3、最后将放在在中间柱的N-1个盘,经由开始柱,移到目标柱。

代码很简单,如下:

递归解决汉诺塔问题

    第一个moveTower递归是将开始柱的N-1个盘从开始柱移到中间柱,然后moveDisk递归是将第N个盘,从开始柱移到目标柱,第二个moveTower递归是将中间柱的N-1个盘移到目标柱上。

     最后关于递归算法,我们虽然看着代码很简单,但真要深入理解也是很费脑细胞的,不过递归确实有中数学上的简洁美和逻辑美。

相关文章

  • 通过递归解决汉诺塔问题

    汉诺塔(Tower of Hanoi)问题源于印度传说,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠...

  • 常见算法1——递归算法

    递归算法就是通过自身不断反复调用自身以解决问题,其中最经典的也就是汉诺达和斐波纳契数列的问题了。1.汉诺塔问题在印...

  • 数据结构与算法-递归分治-汉诺塔思想

    折半查找算法的递归实现 思想:减少查找序列的长度,分而治之地进行关键字的查找 汉诺塔问题 汉诺塔是我们递归思想,分...

  • 数据结构算法之递归和栈结构

    递归 程序调用自身的编程技巧称为递归简单案例:n的阶乘 汉诺塔 汉诺塔问题描述:3个柱为a、b、c,圆盘最初在a柱...

  • Python 汉诺塔的实现

    汉诺塔的实现,是一个典型的递归问题,当然越是复杂的递归问题越是考验人的抽象思维; 哈哈哈,言归正传,汉诺塔问题如下...

  • 汉诺塔递归

    学习汉诺塔递归算法

  • 递归解决汉诺塔

    算法: 当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。 当A塔上有两个盘子是,先将A塔上的1号盘子(...

  • 一个古老而又经典的算法-汉诺塔问题

    哈诺塔问题相信只要学习计算机的人都知道。这是一个古老而又伟大的问题。在这篇文章中,主要是给出递归解决汉诺塔问题的代...

  • 具体数学第一章笔记及习题解答

    本章主要探讨了三个问题汉诺塔,直线切分平面,约瑟夫问题,这三个问题都是典型的递归问题,之后介绍了解决递归式的成套方...

  • Python实现汉诺塔递归算法

    汉诺塔算法 要想利用递归函数解决问题,一定要完成两个基本的要素:递归的终止条件,递推公式。为了分析得到递归函数,下...

网友评论

      本文标题:通过递归解决汉诺塔问题

      本文链接:https://www.haomeiwen.com/subject/zbafphtx.html