精华内容
下载资源
问答
  • 递归实现汉诺塔问题

    2019-10-05 14:18:47
    public class Hanoi {//递归实现汉诺塔问题 public static void HanoiTower(int n,String source, String assist,String dest){ //n为盘子个数,source为原始柱子,assist为辅助柱子,dest为目标柱子 if(n...

    三个盘子的实现过程如下图所示:在这里插入图片描述
    代码实现:

    public class Hanoi {//递归实现汉诺塔问题
        public static void doHanoiTower(int n,String source, String assist,String dest){
            //n为盘子个数,source为原始柱子,assist为辅助柱子,dest为目标柱子
            if(n==1){//若只有一个盘子,直接将它从source移到dest
                System.out.println("move "+n+" from "+source+" to "+dest);
                return;
            }else{
                doHanoiTower(n-1,source,dest,assist);//先将上面n-1个盘子从source移到assist
                System.out.println("move "+n+" from "+source+" to "+dest);//最下面的盘子可直接从source移到dest
                doHanoiTower(n-1,assist,source,dest);//最后再把n-1个盘子从assist移到dest
            }
        }
        public static void main(String[] args) {
            doHanoiTower(3,"A","B","C");
        }
    }
    展开全文
  • 主要介绍了PHP递归实现汉诺塔问题的方法,简单描述了汉诺塔问题,并结合实例形式分析了php基于递归算法解决汉诺塔问题的相关操作技巧,需要的朋友可以参考下
  • java递归实现汉诺塔问题 问题: 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天...

    java递归实现汉诺塔问题


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


    思路:

    一、如果只有一个圆盘的时候,直接把圆盘从A移动到C即可
    二、如果有两个或两个以上圆盘的时候需要三步:
    1.把前n-1个圆盘看成一个整体,把这个整体从A盘移动到B盘
    2.把第n个圆盘从A移动到C
    3.把B盘上的n-1个圆盘从B盘移动到C盘


    代码实现:
    public class HanNuoTa {
        public static void main(String[] args) {
            int nDisks = 3;
            doTowers(nDisks, 'A', 'B', 'C');
        }
        public static void doTowers(int topN, char from, char inter, char to) {
            if (topN == 1){
                System.out.println("Disk 1 from "
                        + from + " to " + to);
            }else {
                doTowers(topN - 1, from, to, inter);
                System.out.println("Disk "
                        + topN + " from " + from + " to " + to);
                doTowers(topN - 1, inter, from, to);
    
            }
        }
    }
    
    展开全文
  • c++递归实现汉诺塔问题。 算法分析与设计 例题的源码实现。跟书上的一样。
  • 利用递归实现汉诺塔问题的求解(Python) 一、什么是汉诺塔问题 有三个石塔,第一个从小到大摞着64片圆盘。现在把圆盘按大小顺序重新摆放在最后一个塔上。并且规定,在小圆盘上不能放大圆盘,在三个塔之间一次只能移动...

    利用递归实现汉诺塔问题的求解(Python)

    一、什么是汉诺塔问题

    有三个石塔,第一个从小到大摞着64片圆盘。现在把圆盘按大小顺序重新摆放在最后一个塔上。并且规定,在小圆盘上不能放大圆盘,在三个塔之间一次只能移动一个圆盘。关于汉诺塔问题的详细介绍,网上有很多,在此就不再赘述。

    二、递归实现汉诺塔问题

    我们假设三个石塔分别为A,B,C,刚开始圆盘都在A石塔上,我们要把它们移动到C石塔上,在这里A就是起始石塔,C是目标石塔,B则是中间石塔。随着圆盘的移动,我们要不停的切换起始石塔和中间石塔,即A也有可能变成中间石塔,B也有可能是起始石塔。

    当圆盘数为2时,我们要把最上面的一个圆盘从A移动到B。再把第二个圆盘从A移到C。最后把小圆盘从B移到C,这些都是单步操作,不需要借助中间圆盘,便可以实现从起始圆盘到目标圆盘的移动
    整个过程即三步,用代码表示如下:

    move(A,C,B)
    move(A,B,C)
    move(B,A,C)
    

    move()函数中的三个参数:第一个始终代表是圆盘起始移动位置,第三个始终代表是圆盘目标位置,这一点记住,在写参数时才不会把参数写错。

    当圆盘数为3时,我们便可开始递归求解的方法,把三个圆盘从小到大依次标记为1,2,3;利用递归解法,我们可以把圆盘1,2合起来看为1’,此时问题便成为由圆盘1’和圆盘3两个圆盘组成的汉诺塔问题,过程如下:
    1:把1’从A移动到B (此处需要递归)
    2:把3从A移到C
    3:把1’从B移到C (此处需要递归)
    可以看到和两个圆盘的移动方法一样
    那么怎么把1’从A移动到B呢?这便可以看成起始石塔是A,目标石塔是B的二阶汉诺塔问题,求解与刚刚相同,只是目标石塔换了。把1’从B移到C的过程也类似

    一般分析汉诺塔问题时是从三阶开始,这样中间石塔的过渡作用可以体现出来,但是可能有的人觉得不化成但不操作不好理解,不管哪种方法,在每一步始终分清起始石塔与目标石塔就不会错。
    另外:关于初步接触汉诺塔问题的小白,在手动分析多层汉诺塔问题时,如果圆盘数为偶数,第一个圆盘要移动到中间石柱上,即B石柱上;如果为奇数,第一个圆盘要移动到目标石柱上,即C石柱上。

    三、代码实现

    # 注释以2阶汉诺塔问题为例
    def move(n,a,b,c):
    	if n==1:
    		print(a+'--->'+c) # 输出1:A--->B  输出3:B--->C
    	else:
    		move(n-1,a,c,b) # 第一步:把第一个圆盘从A移到B
    		print(a+'--->'+c) # 第二步:把第二个圆盘从A移到C 输出2:A--->C
    		move(n-1,b,a,c) # 第三步:把第一个圆盘从B移到C
    if __name__=='__main__':
    	move(3,'A','B','C')
    
    展开全文
  • 递归实现汉诺塔问题,用c++写的。在visual studio环境下编译即可运行,很适合初学数据结构的人
  • 用一个简单的递归方式实现汉诺塔问题: 大家可以去4399玩一下这个游戏 具体的连接地址http://www.4399.com/flash/109504_1.htm 就是这个了 package hanNuoTa; /** * Created by xiaobai on 2019/3/10. * 汉诺...

     用一个简单的递归方式实现汉诺塔问题:

    大家可以去4399玩一下这个游戏

    具体的连接地址  http://www.4399.com/flash/109504_1.htm  就是这个了

    package hanNuoTa;
    
    /**
     * Created by xiaobai on 2019/3/10.
     *  汉诺塔游戏的java 实现
     * @author xiaobai.
     * @DATE 2019/3/10
     */
    public class TestHanNuoTa {
        public static void main(String[] args) {
            hanNuoTa(3,'A','B','C');
        }
    
        //递归方法
        public static void hanNuoTa(int n,char from,char in,char to){
            if(n == 1){
                System.out.println("把第一个从"+from+"移动到"+to);
            }else{
                //把上面所有的挪动到中间位置
                hanNuoTa(n-1,from,to,in);
                //移动下面的盘子
                System.out.println("把第"+n+"个从"+from+"移动到"+to);
                //挪动最下面的盘子
                hanNuoTa(n-1,in,from,to);
            }
        }
    }
    

    各位互勉啦= 。=

    展开全文
  • 1汉诺塔问题递归实现; 。。 。。上代码! #include<stdio.h> void main(){ void hannoi(int n,char one,char two,char three); int m; printf("input the number of diskes:"); scanf("%d",&m); ...
  • * 用栈来求解汉诺塔问题的两种方法 * 方法一:递归实现 * 方法二:非递归实现,用栈来模拟递归,因为递归的本质上也是栈 * 前提条件:不能直接从左移动到右,也不能从右直接移动到左,而是必须经过中间 * */ ...
  • 一个简单的用递归方法实现汉诺塔问题,主要练习递归方法
  • 汉诺塔问题要求 有三个柱子A,B,C A柱子上有n个盘子,盘子从下到上依次缩小堆放在柱子上 要求把A柱子上的圆盘移动到C上去 移动过程中必须保证小的圆盘永远在大的圆盘上方 步骤 1.将A上的n-1个盘子借助C移到B上 2....
  • #include using namespace std; void Hanoi(int n,char a,char b, char c) { if (n == 1)cout << “move” << a << “to” << c << endl; else { Hanoi(n - 1, a, c, b);...
  • 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算...
  • 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,252
精华内容 500
关键字:

递归实现汉诺塔问题