汉诺塔问题,是心理学实验研究常用的任务之一。该问题的主要材料包括三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱A、辅助柱B及目标柱C。

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

言归正传,汉诺塔问题的核心其实就是把上面的盘子移动到第三个柱子(辅助柱)上,然后把最底下的盘子移动到目标柱上,再把原先的柱子作为辅助柱,将其余盘子放在最大的盘子上。下面是动画演示图:

其实怎么做我们高中时候就已经学习过了,那么如何使用C语言来实现上述过程呢?这时候就用到了函数的递归思想,通过函数的嵌套调用,来实现上述过程。下面是C语言的代码以及部分解析:

#include <stdio.h>void Hanoi(int n, char a, char b, char c)//此时a是原柱,b是目标柱,c是辅助柱
{if (n == 1){printf("移动%d:从%c到%c\n", n, a, b);//这个是当只剩下最底下的盘子时,直接移动到目标柱上}else{Hanoi(n - 1, a, c, b);//这个时候a是原柱,c是目标柱,b是辅助柱printf("移动%d:从%c到%c\n", n, a, b);//移动完上面的柱子后把最底下的柱子移动走Hanoi(n - 1, c, b, a);//这个时候c是原柱,b是目标柱,a是辅助柱}
}
int main()
{int n = 0;printf("输入放上的塔数:");scanf("%d", &n);Hanoi(n,'A', 'B', 'C');return 0;
}

上面是代码,下面我们来实现一下,跟着程序结果走一遍,是不是发现不用动脑也可以解出来汉诺塔问题呢?我们以3个盘子为例,从上到下依次标记为1,2,3。同时我们有三个柱子,接下来,跟着程序走吧:

怎么样,是不是感觉C语言来解决这种题方便了许多呢?其实核心就是递归思想,递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归的主要思想就是:把大事化小。

是不是很有趣呢?你也来试试吧。如果本文对你有帮助或者觉得有趣,就给一个小红心吧。下期再见。

汉诺塔问题(Hanoi)相关推荐

  1. Bailian4147 汉诺塔问题(Hanoi)

    4147:汉诺塔问题(Hanoi) 总时间限制: 1000ms 内存限制: 65535kB 描述 一.汉诺塔问题 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小. ...

  2. 汉诺塔(Hanoi Tower)

    问题分析 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. ...

  3. 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘

    汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.借助c杆将所有的圆盘移到b杆上,每次只能移一个,且小的盘子一定在大的盘子上面 它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上 ...

  4. 汉诺塔(Hanoi)移动步骤问题

    汉诺塔 (Hanoi) 规则:把n个盘子从A柱,移动到C柱,中间可以使用B柱,把移动的步骤及移动的步数打印出来.( 递归方法 ) #include <stdio.h>int step = ...

  5. 汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示。

    汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示.上帝命令婆罗门把圆盘从下 ...

  6. 百练OJ:4147:汉诺塔问题(Hanoi)——python实现汉诺塔

    一.汉诺塔问题 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘 ...

  7. 汉诺塔(hanoi)、双色汉诺塔(分离型)、三色汉诺塔

    汉诺塔 汉诺塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市:1883年法国数学家Edouard Luca ...

  8. 汉诺塔(Hanoi) ——递归思想

     汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.传说故事可以点这看. 汉诺塔问题是一个经典的数学难题,由 3 根柱子和多个半径不等的圆盘构成,如下图所示: 汉诺 ...

  9. 玩转汉诺塔(hanoi)游戏

    汉诺塔由来 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由 ...

  10. 汉诺塔(hanoi)问题(C语言,递归)

    一.什么是汉诺塔? 设有 a.b. c 共 3 根塔座, 在塔座 a上堆叠 n个盘子, 每个盘大小不同, 只允许小盘在大盘之上,最底层的盘最大.   游戏要求:现在要求将 a上的盘全都移到 c 上,在 ...

最新文章

  1. PathMatchingResourcePatternResolver通过适配符寻找符合条件的java类
  2. 知识图谱学习笔记-风控知识图谱设计
  3. Python——Python连接MySQL数据库
  4. stylus之其余参数(Rest Params)
  5. python回测量化交易策略收益率
  6. STL13-list容器(链表)
  7. JSon转化为DaTable
  8. 《编程之美》蚂蚁爬杆问题的扩展【1】
  9. Python爬虫之(八)数据提取-Beautiful Soup
  10. 手把手教您怎么编写第一个单片机程序
  11. CAXA实体设计 2020相对其他3D软件的优势有哪些?
  12. JavaScript动态生成HTML元素
  13. c语言编译器提示隐式声明,在C中使用“隐式声明功能”警告有什么含义?
  14. 我的创作纪念日(3周年)
  15. C语言向有序数组中插入一个数使该数组仍保持有序
  16. yied 和 return 的用法区别
  17. 数据结构课程设计【C++实现】
  18. 【软件测试】软件测试的介绍和分类
  19. c++ 回车键无法换行
  20. 车联网目前在我国主要的应用市场

热门文章

  1. 重启服务器后,tomcat自动重启
  2. springboot maven配置文件外置
  3. 【python可迭代对象】
  4. 流量易得情怀难守?董宇辉爆火用半年,新东方“暴雷”只需一周?
  5. 自己做的roguelike+恶魔城游戏《魔塔猎人》已发布。
  6. 在易趣的日子 (07) 美国式的傲慢III
  7. 论 Java 如何优雅的导出 Excel
  8. Docker - Docker网络
  9. 【论文笔记】Stylistic Response Generation by Controlling Personality Traits and Intent
  10. C语言int的取值范围