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

(忍不住调侃一下,难怪印度神片能这么有“内味”)

#######最后会附上源代码#######

先声明一下,我们之间约定三根柱子分别为:X Y Z,

先来一个快餐规律:

刚开始在XY柱上  现在只有X柱有盘子

X柱上  除了最底下的盘子, 都移动到Y柱, 然后就可以让最底层的盘子安心移动到Z柱

(在XY柱上 现在只有Y柱上有盘子)

Y柱上  除了最底层的盘子, 都移动到X柱,然后就可以让最底层的盘子安心移动到Z柱

(在XY柱上 现在只有X 柱上有盘子)

嗨害,你看,在XY柱上  现在只有X柱上有盘子,回到了我们刚开始的那一步

并且我们每一次移动都保证最底下的,也就是保持着大的盘子在下面,小的在上面

那么现在来认真讲解一下细节,复杂的程序,让我们化繁为简,从三个盘子开始做起!                   请认真看完。

1

2

3

X         Y       Z

首先你先从最简单的三个盘子开始移动,我们读完题目肯定都知道,

第一步:把除了最底层的盘子,X柱上的盘子都移动到Y上面,以便于X底层的盘子移动到Z上

肯定是先把X柱子最上面那个盘子移动到Z上,

2

3                      1

X          Y         Z

然后把第二个盘子移动到Y上

3           2         1

X          Y         Z

然后第一个盘子已经在Z上了,现在把他移动到Y上面,也就是第二个盘子上面

1

3            2

X           Y         Z

然后现在可以直接把X上最大的盘子3,移动到Z上面

1

2         3

X          Y         Z

第二步:把除了最底层的盘子,Y柱上的盘子都移动到X上面,以便于Y底层的盘子移动到Z上

现在把1号盘子移动到X上

1          2         3

X          Y         Z

然后最Y底层的就是2号盘子,移动到Z上

2

1                     3

X          Y         Z

最后那肯定是把X上面那个小兔崽1号盘子移动到Z上了,

1

2

3

X          Y         Z

完成任务~

相信理解了上面之后你们就会编码了,我这个仅供参考:

#include<stdio.h>
void hanoi(int, char, char, char); //打印出移动步骤 int main()
{
//汉诺塔游戏
int n;
printf("请输入你要移动多少个汉诺塔:");
scanf("%d", &n);
printf("你需要按照下面步骤来移动:\n");
hanoi(n, 'X', 'Y', 'Z'); return 0;
} void hanoi(int n, char x, char y, char z)
{
if(n == 1)//递归结束条件,每个递归都要有这个结束条件,看程序要求而定条件内容
{
printf("%c--->%c\n", x, z);
//n等于一的时候就是移动到最后那一步了,也就是递归的结束条件
}
else
{
hanoi(n-1, x, z, y);//除了底层的盘子 把X上的全部移动到Y, 所以是n-1
printf("%c--->%c\n", x, z);
hanoi(n-1, y, x, z);//除了底层的盘子 把Y上的全部移动到Z, 所以是n-1
} }

C语言:汉诺塔问题(Hanoi Tower)------递归算法的更多相关文章

  1. 算法:汉诺塔问题(Tower of Brahma puzzle)

    一.算法背景 最早发明这个问题的人是法国数学家爱德华·卢卡斯.传说越南河内某间寺院有三根银棒(A, B, C),上串 64 个金盘. 寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这 ...

  2. 汉诺塔问题(The Tower of Hanoi)的递归算法与非递归算法

    非递归算法: 根据圆盘的数量确定柱子的排放顺序: 若n为偶数,按顺时针方向依次摆放 A B C: 若n为奇数,按顺时针方向依次摆放 A C B. 然后进行如下操作: (1)按顺时针方向把圆盘1从现在的 ...

  3. JavaScript算法实现之汉诺塔(Hanoi)

    目前前端新手,看到的不喜勿喷,还望大神指教. 随着Node.js,Angular.js,JQuery的流行,点燃了我学习JavaScript的热情!以后打算每天早上跟晚上抽2小时左右时间将经典的算法都 ...

  4. [js - 算法可视化] 汉诺塔(Hanoi)演示程序

    前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...

  5. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  6. C语言 汉诺塔问题

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 汉诺塔是由三根杆子A,B,C组成的.A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按 ...

  7. 汉诺塔(hanoi)

    汉诺塔代码: def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) print(x,'-->',z) ...

  8. C#递归解决汉诺塔问题(Hanoi)

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...

  9. c语言-汉诺塔递归调用

    #include<stdio.h> int main() { void hano_tower(int n,char one,char two,char three); int m=0; p ...

  10. 汉诺塔 Hanoi Tower

    电影<猩球崛起>刚开始的时候,年轻的Caesar在玩一种很有意思的游戏,就是汉诺塔...... 汉诺塔源自一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度 ...

随机推荐

  1. SSL新年欢乐赛暨BPM退役赛(不含FK)

    目录 前言 C 大水题 题目 分析 代码 D 简单数据结构题 题目 分析 代码 H 上次题 题目 分析 代码 J 白给题 题目 分析 代码 前言 A,B水题,E,I原题 实际赛时400分(乐多毁我青春 ...

  2. #链表#洛谷 3794 签到题IV

    题目 给出一个长度为\(n\)的数列\(a\),求 \[\sum_{i=1}^n\sum_{j=i}^n[\gcd(a_{i\sim j})\;xor\;or(a_{i\sim j})=k] \] 分 ...

  3. #线段树,约数#洛谷 3889 [GDOI2014]吃

    题目 有一个长度为\(n\)的数列,现在有\(m\)组询问每次给出区间\([l,r]\),查询 \[\max_{i,j=1}^n\{gcd(a_i,a_j)[(i<l或i>r)且l\leq ...

  4. 做好PPT,提高沟通效率

    本文于2019年7月12日完成,发布在个人博客网站上. 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来. 只用一套PPT来通杀全部使用场景,这个想法其实很天真. 作为一种 ...

  5. C# 属性概述

    属性概述 属性允许类公开获取和设置值的公共方法,而隐藏实现或验证代码. get 属性访问器用于返回属性值,而 set 属性访问器用于分配新值. 这些访问器可以具有不同的访问级别. 有关详细信息,请参阅 ...

  6. web.xml最新配置文件

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmln ...

  7. HMS Core Discovery第15期直播预告|构筑立体世界,共造沉浸式营销

    [导读] AR技术,是一种将真实世界信息和虚拟世界信息"无缝"衔接的技术,现如今AR技术受到日益广泛的关注,在我们生活中发挥着重要的作用,并显示出巨大的潜力--它是如何改变我们观察 ...

  8. cmd中怎么清屏--cls

    平时我们在 Linux 系统中清除屏幕 用的命令是:  clear 现在在Windows上用的清屏命令是 : cls

  9. C#的AOP(最经典实现)

    (适用于.NET/.NET Core/.NET Framework) [目录]0.前言1.第一个AOP程序2.Aspect横切面编程3.一个横切面程序拦截多个主程序4.多个横切面程序拦截一个主程序5. ...

  10. 【中秋国庆不断更】XML在HarmonyOS中的生成,解析与转换(下)

    一.XML解析 对于以XML作为载体传递的数据,实际使用中需要对相关的节点进行解析,一般包括解析XML标签和标签值.解析XML属性和属性值.解析XML事件类型和元素深度三类场景. XML模块提供Xml ...