关于C语言汉诺塔问题,当程序执行到001、002、003步时,不知道具体是个什么步骤,求大神解惑!

关于C语言汉诺塔问题,当程序执行到001、002、003步时,不知道具体是个什么步骤,求大神解惑!

狼首破vtb8452016.06.12浏览17次其他分享举报

#include<stdio.h>intmain(){/*对hanoi函数的声明*/voidhanoi(intn,charone,chartwo,charthree);intm;printf("inputthenumberofdiskes:");scanf("%d",&m);printf("Thesteptomove%ddis... #include <stdio.h>

int main()
{
/*对 hanoi 函数的声明*/
voidhanoi(int n, char one, char two, char three);
intm;

printf ("input the number of diskes:");
scanf ("%d", &m);
printf ("The step to move %d diskes:\n", m);
hanoi(m, 'A', 'B', 'C');
}

/*定义 hanoi 函数*/
void hanoi(int n, char one, char two, char three)
{
/*对 move 函数的声明*/
voidmove(char x, char y);

if (n == 1)
{
move(one, three);
}
else
{
hanoi(n - 1, one, three, two);//001步
move(one, three);//002步
hanoi(n - 1, two, one, three);//003步
}
}

/*定义 move 函数*/
void move(char x, char y)
{
printf("%c-->%c\n", x, y);
} 展开

狼首破vtb845

采纳率:59%    等级:10

已帮助:1267

私信TA向TA提问
1个回答
满意答案

etonguan

2016.06.15

etonguan

采纳率:59%    等级:10

已帮助:264

私信TA向TA提问
第一步是,将n-1个盘子从柱子A移动到柱子C,通过柱子B。
第二步就是将最后1个盘子从A移动到C。
第三步就是将在B上的盘子,通过A移动到C。
举个例子:A,B,C三根柱子,A柱子从下至上编号1,2,3的盘子
那么第一步就是将上2,3两个个盘子移动到B:那就是将3移动到C,将2移动到B,将3移动到B。
第二步就是将3移动到C。
第三步就是将2,3两个盘子移动到C:将3移动到A,将2移动到C,将3移动到C。

总结一下就是:
当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),
然后将A塔上最大的n号盘子移动到C塔上,
最后将B塔上的n-1个盘子借助A塔移动到C塔上。

  • 追问: 我想问的是在上面那段代码中001步002步003步是怎么一步步实现的。
  • 追答:已你的代码逻辑为例:3个盘子的调用顺序(--------------这个注释就是你说的第几步) hanoi(3, 'A’, 'B’, 'C’); hanoi(2, 'A’, 'C’, 'B’);--------------------------------------------------------//001步 hanoi(1, 'A’, 'B’, 'C’);-->move('A’, 'C’);//将1个盘子从A移动到C move('A’, 'B’);//将1个盘子从A移动到B--------------------------------------//002步 hanoi(1, 'C’, 'A’, 'B’);--->move('C’, 'B’);//将1个盘子从C移动到B hanoi(2, 'B’, 'A’, 'C’);--------------------------------------------------------------//003步 hanoi(1, 'B’, 'C’, 'A’);-->move('B’, 'A’);//将1个盘子从B移动到A move('B’, 'C’);//将1个盘子从B移动到C hanoi(1, 'A’, 'B’, 'C’);--->move('A’, 'C’);//将1个盘子从A移动到C
00分享举报
(0)

相关推荐

  • Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 输出结果 核心代码 def hanoi(n,x,y,z): if n==1: print(x,'--→',z) else: hano ...

  • 汉诺塔问题,五个盘子具体走法

    我移了三盘的和四盘的,就是推不出五盘的...笨嘛...等指教 1个回答 满意答案 fatso1118 推荐于 2017.12.15 五个柱子!分别为1号 2号 3号 五个盘子 A B C D E 这样 ...

  • 汉诺塔的递归问题

    gzqldz9t32013.05.25 看书还是不怎么理解,当盘子为4个时候的,怎么移动,例子都是3个 gzqldz9t3 采纳率:53%    等级:11 已帮助:16112人 私信TA向TA提问 ...

  • 汉诺塔递归算法流程图的搜索结果

    汉诺塔递归算法流程图的搜索结果

  • C++ - 汉诺塔

    >=FreeMan=<2019-02-22 14:50:27 分类专栏:C++文章标签:汉诺塔C++ 版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链 ...

  • 汉诺塔算法

    汉诺塔算法 ----C++语言递归实现 线上幽灵 2018-04-24 17:19:59 8159 收藏 26分类专栏:算法 文章标签:汉诺塔版权声明:本文为博主原创文章,遵循 CC 4.0 BY-S ...

  • c/c++ 递归实现汉诺塔问题(代码内部运行详细解释)。

    Wings_of_freedom2020-04-23 18:08:14 114 收藏 文章标签:算法c++数据结构 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  • 如何玩八层的汉诺塔?

    8层汉诺塔共有: 2^8 - 1 = 255个步骤 以下是移动的过程:(说明: A表示第一个柱子   B表示第二个珠子  C表示第三个柱子  -->表示盘的移动方向) 对于汉诺塔问题的求解,可以 ...

  • 关于C++的递归(以汉诺塔为例)

    关于C++,hanoi塔的递归问题一直是个经典问题,我们学习数据结构的时候也会时常用到, 因为它的时间复杂度和空间复杂度都很高,我们在实际的应用中不推荐使用这种算法,移动n个盘子, 需要2的n次幂减一 ...

  • 汉诺塔问题的两种解法(1)

    汉诺塔是一种益智玩具,源自古老的印度.如图1.图2及图3所示,有三根柱子,若干个大小不等的圆盘按顺序依次叠落在起点(左侧)的柱子上,通过多次移动后,全部圆盘要叠落在终点(右侧)的柱子上.移动必需遵守两 ...