汉诺塔问题是一个经典的问题。汉诺塔(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. #并查集,树状数组#洛谷 5610 [Ynoi2013] 大学

    题目 分析 设最大值为 \(mx\),考虑每个数最多被除以 \(\log{mx}\) 次,那么加上树状数组的维护为 \(O(n\log{n}\log{mx})\) 问题就是如何快速找到这些位置,可以对 ...

  2. 李东山:如何让 OpenHarmony 支持低功耗蓝牙芯片 GR551x

    编者按:在 OpenHarmony 生态发展过程中,涌现了大批优秀的代码贡献者,本专题旨在表彰贡献.分享经验,文中内容来自嘉宾访谈,不代表 OpenHarmony 工作委员会观点. 李东山 深圳市汇顶 ...

  3. 分布式数据对象:超级终端的"全局变量"

    3月底发布的OpenAtom OpenHarmony(以下简称"OpenHarmony")3.1 Release版本中,新增了分布式数据对象特性.什么是分布式数据对象呢?本期就让我 ...

  4. Docker学习路线12:开发者体验

    到目前为止,我们只讨论了使用Docker来部署应用程序.然而,Docker也是一个极好的用于开发应用程序的工具.可以采用一些不同的建议来改善开发体验. 在应用程序中使用docker-compose以方 ...

  5. HarmonyOS API Version 7版本特性说明

    2020年9月11日,HarmonyOS SDK发布了首个Beta版本,支持基于HarmonyOS的华为智慧屏.智能穿戴.车机设备开发,让广大的开发者正式步入了HarmonyOS应用开发之旅. 开发者 ...

  6. ThinkPHP6.x 使用指南

    PHP 版本:PHP 8.1.0 框架版本:ThinkPHP 6 编辑工具:PHPStorm 2021.3.3 系统环境:Windows 10 0x01 概述 (1)简介 ThinkPHP 框架简称 ...

  7. js 使用flow

    前言 what is flow?我想是的,很多人都没有接触过,的确,他是一个新的项目,是的facebook开发的东西,一般还是可以的,有必要去学习一下,在react还是比较重要的. 它做的一件事叫做静 ...

  8. 推荐一个计算Grad-CAM的Python库

    前言 类激活图CAM(class activation mapping)用于可视化深度学习模型的感兴趣区域,增加了神经网络的可解释性.现在常用Grad-CAM可视化,Grad-CAM基于梯度计算激活图 ...

  9. 万节点规模云服务的 SRE 能力建设

    简介: 随着越来越多企业以容器作为系统底座,那么阿里云的云服务又是如何进行SRE规划呢?下文将由资深SRE工程师拆解2 万节点规模云服务背后的 SRE 能力建设,立即点击观看! 作者:宋傲(凡星)   ...

  10. 一个开发者自述:我是如何设计针对冷热读写场景的 RocketMQ 存储系统

    简介: 文章中的很多知识点,都是通过云原生编程挑战赛学到的,在一些问题在表述方式.甚至理解上都可能存在一些问题,甚至会有一些谬论:敢于尝试就会犯错,有犯错才会有成长,欢迎各位大佬不舍赐教,多多指正,让 ...