C语言:汉诺塔问题(Hanoi Tower)------递归算法
汉诺塔问题是一个经典的问题。汉诺塔(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)------递归算法的更多相关文章
- 算法:汉诺塔问题(Tower of Brahma puzzle)
一.算法背景 最早发明这个问题的人是法国数学家爱德华·卢卡斯.传说越南河内某间寺院有三根银棒(A, B, C),上串 64 个金盘. 寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这 ...
- 汉诺塔问题(The Tower of Hanoi)的递归算法与非递归算法
非递归算法: 根据圆盘的数量确定柱子的排放顺序: 若n为偶数,按顺时针方向依次摆放 A B C: 若n为奇数,按顺时针方向依次摆放 A C B. 然后进行如下操作: (1)按顺时针方向把圆盘1从现在的 ...
- JavaScript算法实现之汉诺塔(Hanoi)
目前前端新手,看到的不喜勿喷,还望大神指教. 随着Node.js,Angular.js,JQuery的流行,点燃了我学习JavaScript的热情!以后打算每天早上跟晚上抽2小时左右时间将经典的算法都 ...
- [js - 算法可视化] 汉诺塔(Hanoi)演示程序
前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好. 受此启发,我决定写几个js的算法动画,第一个就用汉诺塔. 演示地址:http://tut.ap ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
- C语言 汉诺塔问题
//凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 汉诺塔是由三根杆子A,B,C组成的.A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按 ...
- 汉诺塔(hanoi)
汉诺塔代码: def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) print(x,'-->',z) ...
- C#递归解决汉诺塔问题(Hanoi)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...
- c语言-汉诺塔递归调用
#include<stdio.h> int main() { void hano_tower(int n,char one,char two,char three); int m=0; p ...
- 汉诺塔 Hanoi Tower
电影<猩球崛起>刚开始的时候,年轻的Caesar在玩一种很有意思的游戏,就是汉诺塔...... 汉诺塔源自一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度 ...
随机推荐
- #平衡树#洛谷 1110 [ZJOI2007]报表统计
题目 分析 最小值只需要开两棵平衡树,一棵维护所有元素,一棵维护相邻最小值, 对于全局最小值,对于每次插入查找前驱后继更新最小值即可, 相邻最小值,对于每个原数列的数维护它的开头和结尾是什么数, 然后 ...
- 带你玩转OpenHarmony AI:基于Seetaface2的人脸识别
简介 随着时代的进步,全民刷脸已经成为一种新型的生活方式,这也是全球科技进步的又一阶梯,人脸识别技术已经成为一种大趋势,无论在智慧出行.智能家居.智慧办公等场景均有较广泛的应用场景,本文介绍了基于Se ...
- Linux程序崩溃自启动方法
linux进程挂掉后,可以通过配置 systemd 来自动启动服务 1.创建 systemd 服务文件,例如:huyang.service,需要放置在系统文件夹 /etc/systemd/system ...
- openGauss每日一练第四天
openGauss 每日一练第四天 本文出处:https://www.modb.pro/db/193083 学习地址 https://www.modb.pro/course/133 学习目标 学习 o ...
- HarmonyOS 设备管理开发:USB 服务开发指导
基本概念 USB服务是应用访问底层的一种设备抽象概念.开发者根据提供的USB API,可以获取设备列表.控制设备访问权限.以及与连接的设备进行数据传输.控制命令传输等. 运作机制 USB服务系统包 ...
- centos8 \CentOS 9 Stream rpm 安装mysql8.0.28
centos8 rpm 安装mysql8.0.28 检查 检测系统是否自带安装 MySQL 命令如下: rpm -qa | grep mysql 如果如下存在已安装的包,就需要卸载 mysql80-c ...
- 推荐两款HTTP请求Mock利器
1.背景 在日常测试过程中或者研发开发过程中,目前接口暂时没有开发完成,测试人员又要提前介入接口测试中,测试人员不仅仅只是简单的编写测试用例,也可以通过一些mock的方法进行来提前根据接口测试的情况进 ...
- Linux下源码安装Kong网关
kong是基于openresty构建的一个网关,并且直接带了很多的功能比如反向代理.负载均衡.限流等模块直接开箱即用,同时兼具OpenResty的高性能,大部分情况下无需编程就可以实现想要的功能,下面 ...
- 性能提升 57% ,SMC-R 透明加速 TCP 实战解析 | 龙蜥技术
简介:SMC-R 是如何加速 TCP 应用? 编者按:TCP 协议作为当前使用最为广泛的网络协议,场景遍布移动通信.数据中心等.对于数据中心场景,通过弹性 RDMA 实现高性能网络协议 SMC-R, ...
- Android Native crash 处理案例分享
简介: Android Native crash 处理案例分享 1. 背景 目前 mPaas[1] Android使用Crash SDK对闪退进行的处理,CrashSDK 是 Android 平台上一 ...