`
emlyn_1180
  • 浏览: 32837 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

汉诺塔递归算法

阅读更多
汉诺塔是递归算法里的一个经典案例,有三根柱子A,B,C,A柱子上有N个盘子,从小到大依次叠放,要求把A上的盘子都移到C上,B可以作为临时存放,移动的时候必须始终遵循小盘子在大盘子上面,且每次只能移动一个盘子,求其算法。用java实现如下:
public class Hanoi{
    public static void main(String[] args){
        moveAll(4,'A','B','C');
    }
    
    //参数 n表示移动n个盘子,from 表示本来放盘子的,temp是临时存放盘子的,to是最终目的
    public static void moveAll(int n,char from,char temp,char to){
        if(n==1){
            move(n,from,to);
        }else{
            moveAll(n-1,from,to ,temp);//要移动n个盘子首先要将n-1个盘子借助to,移到temp上,然后才能将最大的那个盘子放到to上
            move(n,from,to);//将最大的第n个盘子从from 移到to上
            moveAll(n-1,temp,from,to);//最后再将n-1个盘子由temp,借助from,移动到to上 
        }
    }
    //移动第n个盘子
    public static void move(int n,char from,char to){
        System.out.println("move "+n +" from " + from +" to "+ to);
    }


}

下面的链接是个flash
http://www.sznews.com/jbjob/content/2007-09/17/content_1514108.htm
分享到:
评论

相关推荐

    汉诺塔递归算法--C语言

    这里提供了一个使用C++实现的汉诺塔递归栈版本。通过定义一个结构体`ac`来存储当前状态(包括圆盘数n、源塔x、目标塔y、辅助塔z以及当前阶段r)。在循环中,根据阶段r的值,执行不同的移动操作。这个实现允许我们...

    汉诺塔的递归算法 C++

    用C++实现汉诺塔的递归算法,定义了类和方法。

    c语言汉诺塔的递归算法

    以下是一个C语言实现汉诺塔递归算法的基本框架: ```c #include void hanoi(int n, char from_rod, char inter_rod, char to_rod) { if (n >= 1) { // 将n-1个圆盘从初始柱移动到辅助柱 hanoi(n - 1, from_rod...

    汉诺塔的递归算法 C语言

    用C语言实现汉诺塔的递归算法,另外还有用栈来实现的方式:http://download.csdn.net/detail/jason19905/6419427

    汉诺塔非递归算法实验报告

    汉诺塔问题是一个经典的计算机科学问题,通常使用递归算法来解决。然而,这个实验报告提出了使用非递归算法来解决汉诺塔问题的方法。非递归算法的关键在于找到一个可重复执行的步骤序列,而不是像递归那样通过自我...

    Java实现汉诺塔递归算法详解

    汉诺塔问题是一个经典的递归算法问题,它源自印度的一个古老传说,旨在通过演示如何将一组盘子从一根柱子移动到另一根柱子来解释宇宙的起源。在这个问题中,我们有三根柱子A、B和C,以及N个大小不一的盘子,初始时...

    汉诺塔的算法,有递归算法

    汉诺塔游戏是一种基于递归的经典问题,源于印度的一个古老传说。它的目标是将一个柱子(源柱)上的所有圆盘按照从大到小的顺序移动到另一个柱子(目标柱),每次移动只能将一个圆盘从一个柱子移到另一个柱子,且任何...

    汉诺塔递归算法(动态效果)

    汉诺塔问题是一个经典的计算机科学问题,源自印度的古老传说,它涉及到递归算法的运用。在这个问题中,有三个柱子,分别标记为A、B、C,柱子A上按照大小顺序叠放着若干个盘子。目标是将所有盘子从柱子A移动到柱子C,...

    汉诺塔层次迭代算法和分析

    汉诺塔递归算法概述 汉诺塔问题的经典定义涉及三根针(标记为A、B、C)以及位于A针上的n个不同大小的圆盘,其中最大的圆盘位于底部,最小的位于顶部。任务是从A针将所有圆盘移至C针,同时确保在任何时候较大的圆盘...

    汉诺塔递归实现(C语言)

    下面是一个简单的C语言实现汉诺塔递归算法的示例: ```c #include void hanoi(int n, char from_rod, char inter_rod, char to_rod) { if (n >= 1) { // Move n - 1 disks from 'from_rod' to 'inter_rod' ...

    汉诺塔问题递归算法

    汉诺塔问题的递归算法,附详细代码以及运行结果,有详细的算法描述。

    汉诺塔递归与非递归两种算法的代码与结果对比

    递归算法是解决汉诺塔问题的常见方法。基本思路是将问题分解为更小的子问题,直到子问题足够简单可以直接解决。在汉诺塔问题中,这个过程可以这样表示: 1. 将A上的n-1个盘子借助C移动到B。 2. 将A剩下的一个盘子...

    汉诺塔堆栈算法.pdf

    汉诺塔递归算法是一种基于递归函数的解决方法。该算法的核心思想是将汉诺塔问题分解为多个小问题,并使用递归函数来解决这些小问题。 在实现该算法时,我们首先需要定义一个 `solve` 函数,该函数用于解决汉诺塔...

    python实现汉诺塔递归算法经典案例

    Python中实现汉诺塔递归算法的代码如下: ```python def move(n, a, buffer, c): if(n == 1): print(a, "->", c) return move(n-1, a, c, buffer) move(1, a, buffer, c) move(n-1, buffer, a, c) move(3, ...

    汉诺塔非递归算法 数据结构

    以下是实现汉诺塔非递归算法的关键步骤: 1. **创建栈**:首先,我们需要三个栈,分别代表三个柱子A、B和C。初始时,所有盘子都在柱子A上,按大小顺序自顶向下排列。 2. **主循环**:对于每个盘子,我们将其从起始...

    汉诺塔非递归算法

    递归算法通常是解决汉诺塔问题的常见方法,但这里我们要讨论的是非递归算法。 非递归算法通常基于迭代或堆栈的思想来实现。在武汉大学的算法描述中,可能会使用一种称为"栈模拟"的方法,这种方法可以有效地避免递归...

    汉诺塔实现算法

    //程序实现了mystack栈的声明和定义,并且通过函数 //move_stacks的递归调用和函数move_a_ring实现汉 //诺塔的算法,并用函数print_stacks和pr_chars实现汉诺 //塔的动画效果

    VB 2005 汉诺塔递归程序示例

    汉诺塔游戏是一种经典的逻辑问题,它...总之,通过研究这个VB 2005汉诺塔递归程序示例,不仅可以掌握递归算法的实现,还能加深对面向对象编程和.NET Framework的理解,对于提升编程技能和解决实际问题具有重要意义。

    一个关于汉诺塔的非递归算法

    在提供的压缩包中,"汉诺塔非递归算法.doc"可能包含了详细的文字说明,解释了算法的思路和步骤,而"汉诺塔非递归算法.cpp"则是实际的C++源代码,你可以查看并运行这个程序来观察非递归算法如何解决汉诺塔问题。...

Global site tag (gtag.js) - Google Analytics