递归之汉诺塔问题

作者: taylar_where | 来源:发表于2019-05-15 18:08 被阅读1次

我的博客:递归之汉诺塔问题

一.起源:

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

二.抽象为数学问题:

  如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数

java代码

/**

* 解决汉诺塔问题

* 问题描述:有A,B,C三根柱子,A上有n个圆盘,自下而上由大到小的叠在一起,现在要求将A柱子上的圆盘移动到B上,并要求:

*  1.每次只能移动一个圆盘

*  2.任何时候都不能让大圆盘压在较小圆盘上面

*  3.圆盘只能在A,B,C三个柱子之间移动

* @author 曾鹏

*

*/

public class Hanoi {

//创建递归函数 确定递归元

public void hanoi(int n,char A,char B,char C) {  //A表示起点 B表示终点 C表示借助的柱子

if(n==1) {

move(1,A,B);  //n为递归元 n==1为递归终止条件

}else {

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

move(n,A,B);

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

}

}

//移动圆盘

public void move(int index,char start,char end) {

System.out.println("将标号为"+index+"的圆盘从柱子"+start+"移动到柱子"+end+"........");

}

public static void main(String[] args) {

Hanoi hanoi=new Hanoi();

hanoi.hanoi(3, 'A', 'B', 'C');

}

}

关于上述代码的一些解释:在hanoi方法中调用hanoi方法,这明显可以看出是一个递归的问题了,这个递归函数的终止条件是:n==1;接下来再说一说如何使用递归解决汉诺塔问题的

hanoi(n-1, A, C, B); //将(1,n-1)个圆盘从A借助柱子B移动到柱子C

move(n,A,B);         //将圆盘n(相对最大的盘子)从A移动到B

hanoi(n-1, C, B, A); //将(1,n-1)个圆盘冲C借助柱子A移动到B

根据注释不难发现,在解决汉诺塔问题的时候,我们将盘子抽象成了两部分,将最大的盘子作为一部分,剩下的盘子为另一部分,整个移动过程看上去和n=2的移动过程是一样的,但是,通过将整个问题抽象为连两部分后,我们在针对n-1那部分在进行递归,知道n==1的时候结束递归,这样,当递归结束之后,汉诺塔也移动完成了。

最后总结一下:关于递归,我们需要关心的重点是,如何设计递归终止条件,是的递归结束的时候能够解决问题。

相关文章

  • 递归之汉诺塔问题

    我的博客:递归之汉诺塔问题 一.起源: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的...

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

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

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

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

  • Python 汉诺塔的实现

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

  • 汉诺塔递归

    学习汉诺塔递归算法

  • python例子

    利用递归函数移动汉诺塔

  • 递归——汉诺塔问题

    我参考了两位大佬的代码,其中一位是日本的专业程序员。比较有意思的是他出的面向要考试的群体的那本书讲了这个,后来大概...

  • 复杂递归问题:汉诺塔

    复杂递归问题:汉诺塔 汉诺塔问题是法国数学家Edouard Lucas于1883年, 根据传说提出来的。 传说在一...

  • 算法分析与设计

    递归汉诺塔问题: https://blog.csdn.net/xb2355404/article/details/...

  • 2019-11-28汉诺塔算法-递归实现

    使用递归的方式实现汉诺塔

网友评论

    本文标题:递归之汉诺塔问题

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