精华内容
下载资源
问答
  • C语言解决汉诺塔问题

    2020-12-13 17:23:53
    汉诺塔问题 汉诺塔(递归算法求解) 前言 汉诺塔游戏的来源 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一...

    汉诺塔问题


    汉诺塔(递归算法求解)


    前言

    汉诺塔游戏的来源
    在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

    提示:以下是本篇文章正文内容,下面案例可供参考

    一、什么是递归算法?

         在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递 和 归,这正是递归思想的精华所在。
         正如上面所描述的场景,递归就是有去(递去)有回(归来),如下图所示。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的钥匙可以打开后面所有门上的锁一样;“有回”是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。 
    

    二、代码展示

    代码如下(示例):

    #include <stdio.h>
    void hanoi(int n, char x, char y, char z);
    void hanoi(int n, char x, char y, char z)
    {
    if (n==1)
    {
    printf("%c --> %c\n",x,z);
    }
    else
    {
    hanoi(n-1,x,z,y);
    printf("%c --> %c\n",x,z);
    hanoi(n-1,y,x,z);
    }
    }
    int main(void)
    {
    int n;
    printf(“请输入哈诺塔的层数:”);
    scanf("%d",&n);

    return 0;
    

    }

    
    
    
    # 总结
    以上就是用递归算法解决汉诺塔问题,希望对你有所帮助!
    
    
    展开全文
  • #include void moving(char a,char b) {  printf("%c->%c\n",a,b); } void han(int n,char a,char b,char c) {  if(n>0)  {  han(n-1,a,c,b);  moving(a,b);  han

    #include <stdio.h>
    
    void moving(char a,char b)
    {
        printf("%c->%c\n",a,b);
    }
    void han(int n,char a,char b,char c)
    {
        if(n>0)
        {
            han(n-1,a,c,b);
            moving(a,b);
            han(n-1,c,b,a);
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        printf("%d\n",(1<<n)-1);
        han(n,'A','B','C');
        return0;
    }
    


    展开全文
  • c语言解决汉诺塔问题

    2015-01-23 17:05:53
    看代码理解吧: /************************************************************************* > File Name: hanoi.c > Author: Netcan > Mail: 1469709759@qq.com > Created Time: 2015/1/23 16:32:1

    看代码理解吧:

    /*************************************************************************
        > File Name: hanoi.c
        > Author: Netcan
        > Mail: 1469709759@qq.com 
        > Created Time: 2015/1/23 16:32:17
     ************************************************************************/
    
    /* 盘子从上往下编号,1到n
     * 当 n == 1 的时候,
     *		直接将盘中从“A”柱移到“C”柱 
     * 当 n >= 2 的时候,
     *		先将前n-1个盘子从“A”柱借助“C”柱移到“B”柱
     *		然后,将第n个盘子从“A”柱移到“C”柱
     *		最后,将“B”柱上n-1个盘子从“B”柱借助“A”柱移到“C”柱
     */
    
    void hanoi(int n, char A, char B, char C); // 表示n个盘子从“A”柱借助“B”柱移到“C”柱
    
    
    #include<stdio.h>
    int main() 
    {
    	int n;
    	printf("输入盘子数量:");
    	scanf("%d",&n);
    	hanoi(n, 'A', 'B', 'C');
    	return 0;
    }
    
    void hanoi(int n, char A, char B, char C)
    {
    	static int steps = 0;
    	if ( 1 == n )
    		printf("第%d步: 将编号为%d的盘子从%c柱移到%c柱\n", ++steps, n, A, C);
    	else {
    		hanoi(n-1, A, C, B);
    		printf("第%d步: 将编号为%d的盘子从%c柱移到%c柱\n", ++steps, n, A, C);
    		hanoi(n-1, B, A, C);
    	}
    	return;
    }
    
    运行图:

    展开全文
  • C语言解决汉诺塔问题(递归思想)

    千次阅读 2020-10-26 17:47:03
    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在...

    1.汉诺塔:

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

    2.问题描述:

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

    在这里插入图片描述

    (1)当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上;A–>C
    (2)当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上
    再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。
    (3)当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。

    同理:

    (4)当A塔上有n个盘子时,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。

    算法分析:
    (1)n ==1
    第1次 1号盘 A---->C

    移动次数:1

    (2)n == 2
    第1次 1号盘 A---->B
    第2次 2号盘 A---->C
    第3次 1号 B---->C

    移动次数:3

    (3)n == 3
    第1次 1号盘 A---->C
    第2次 2号盘 A---->B
    第3次 1号盘 C---->B
    第4次 3号盘 A---->C
    第5次 1号盘 B---->A
    第6次 2号盘 B---->C
    第7次 1号盘 A---->C

    移动次数:7

    由数学归纳法分析可得:移动次数为:2^n - 1

    3.算法实现

    实现这个算法可以简单分为三个步骤:
    (1) 把n-1个盘子由A 移到 B;

    (2) 把第n个盘子由 A移到 C;

    (3) 把n-1个盘子由B 移到 C;

    (1)中间的一步是把最大的一个盘子由A移到C上去;

    (2)中间一步之上可以看成把A上n-1个盘子通过借助辅助塔(C塔)移到了B上,

    (3)中间一步之下可以看成把B上n-1个盘子通过借助辅助塔(A塔)移到了C上;

    代码及注释:

    #include<stdio.h>
    
    void Move(int n, char A, char B, char C)
    {
    	if (n==1)
    	{
    		printf("%c-->%c\n",A,C);
    	}
    	else
    	{
    		Move(n - 1, A, C, B);//把A上n-1个盘子通过借助辅助塔(C塔)移到了B上
    		printf("%c-->%c\n", A, C);//把最大的一个盘子由A移到C上去
    		Move(n - 1, B, A, C); //把B上n-1个盘子通过借助辅助塔(A塔)移到了C上
    	}
    
    }
    
    int main()
    {
    	int n = 0;
    
    	printf("请输入汉诺塔的盘子数:");
    	scanf("%d", &n);
    
    	Move(n, 'A', 'B', 'C');
    	return 0;
    }
    

    在这里插入图片描述

    展开全文
  • C语言解决汉诺塔问题 汉诺塔是典型的递归调用问题: hanoi简介:印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照...
  • c语言递归解决汉诺塔问题
  • C语言验证汉诺塔问题

    2020-03-24 10:10:51
    汉诺塔是一个很古老的数学模型了,简单介绍一下,古代有个汉诺塔,塔内有3个柱子,分别为a柱,...今天用C语言来实现以下,要采用递归的方式解决问题。 #include <stdio.h> main(){ int n; //汉诺塔层数 voi...
  • C语言汉诺塔问题

    万次阅读 多人点赞 2018-06-05 11:05:14
    汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示。上帝命令婆罗门把圆盘从下面开始按...
  • 运用C语言以及链表的基础知识来解决汉诺塔问题。源程序
  • 代码如下: #include <stdio.h> // 移动一个盘 // disk为一次移动中需要移动的盘符,src为源杆,dest为目标杆 void move_single_disk(int disk, char src, char dest) ...// 汉诺塔函数,递归方式 // hano
  • 汉诺塔 ( 又称河内塔 ) 问题是源于印度一个古老传说的益智玩具 。 古代有一个梵塔 , 塔内个座 A 、 B 、 C , A 座上有 64 个盘子 , 盘子大小不等 , 大的在下 , 小的在上 。 有一个和尚想把64个盘子从 A 座移...
  • c语言 递归算法解决汉诺塔问题

    千次阅读 2017-10-20 15:56:16
    用递归解决汉诺塔问题
  • 汉诺塔问题,来源于古印度的传说。 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的...
  • C语言利用递归解决汉诺塔问题 汉诺塔问题:有三根柱子,从左往右分别记作a,b,c,a柱上有套有n个圆盘,越往下的圆盘越大,其余柱子没有圆盘,现要将a柱上的圆盘全部移动到c柱上,每根柱子上套的圆盘必须满足下方的...
  • C语言解决汉诺塔问题《经典》 首先要知道汉诺塔是怎么一个问题 例如A 、B、 C 三个柱子,A柱子上假如放有三个盘子,最上边是最小的,最下边是最大的盘子;现在想让A柱子借助B柱子将三个盘子移入到C柱子上,《且每次...
  • 汉诺塔汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大梵天命令婆罗门把圆盘从下面开始按大小顺序...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 128
精华内容 51
关键字:

c语言解决汉诺塔问题

c语言 订阅