汉诺塔(hanoi)问题(C语言,递归)
一.什么是汉诺塔?
设有 a、b、 c 共 3 根塔座, 在塔座 a上堆叠 n个盘子, 每个盘大小不同, 只允许小盘在大盘之上,最底层的盘最大。
游戏要求:现在要求将 a上的盘全都移到 c 上,在移的过程中要遵循以下原则:每次只能移动 一个盘;圆盘可以插在 a、b 和 c任一个塔座上;在任何时刻,大盘不能放在小盘的上面。如下图所示
不明白的同学可以在网上搜汉诺塔也有相似的游戏,自己去玩一下有更加深刻的理解和经验。
二.完成汉诺塔游戏的思路和方法
完成汉诺塔这个游戏最重要的是理解递归和游戏的每一步操作动向。
游戏的基本思路:
实现这种算法的分析:
1,hanoi(n,x,y,z),n表示盘子的数量,x,y,z表示三根柱子,代表将x柱上的n-1个盘子经过y柱后移动到z柱子上。可以先用三个盘子的例子想清楚这个过程,后续的都是以这个方式递归执行下去。
2,mov(x,z),表示x柱子上最上的盘子直接移动到c柱子上,以打印的方式将移动结果展示出来。
三.棋盘覆盖的具体实现代码
#include<stdio.h>
void hanoi(int n,char x,char y,char z);
void mov(char x,char z);
int n;//盘子数量
char a,b,c;//三个柱子
int main(){printf("please input numbers:");scanf("%d",&n);hanoi(n,'a','b','c');return 0;}
void hanoi(int n,char x,char y,char z)
{if(n==1){mov(x,z);}else{hanoi(n-1,x,z,y);//将x柱上面的n-1个盘子经z柱移动到y柱mov(x,z);//将x柱的盘子移动到z柱hanoi(n-1,y,x,z);//将y上的n-1个柱子经过x柱移动到z柱}}
void mov(char x,char z)
{printf("%c -> %c\n",x,z);}
运行结果如图:
具体的详细过程参考:懒猫老师-C语言-汉诺塔问题详解(hanoi)_哔哩哔哩_bilibili
汉诺塔(hanoi)问题(C语言,递归)相关推荐
- c语言程序设计电子图书 汉诺塔,用C写的汉诺塔(hanoi)程序
用C写的汉诺塔(hanoi)程序 分类:计算机等级 | 更新时间:2016-07-07| 来源:转载 #include void movedisc(unsigned n,char fromneedle ...
- 汉诺塔(Hanoi)递归算法
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘. 游戏的目标:把A杆上的金盘全部移到C杆 ...
- 汉诺塔python创新设计_递归经典案例汉诺塔 python实现
最近在廖雪峰大神的教程学习python 学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,因此本人以为能够写篇博客来表达一下本身的看法.这markdown编辑器还不怎么会 ...
- 【头歌】汉诺塔(Hanoi)的递归算法
任务描述 本关任务:汉诺塔(Hanoi)的递归算法. 相关知识 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到 ...
- 汉诺塔求次数(用递归)
Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称:汉诺塔求次数(用递归) *作者:杨飞 *完成日期:2013年11月25日 *版本号:v ...
- c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)
问题概述:古代有一个梵塔,塔内有3个座A,B,C.开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上,有一个老和尚想把64个盘子从A座移动到C座,但是规定每次只允许移动一个盘,且在移动过程中在 ...
- c语言汉诺塔实验报告,C语言汉诺塔的简单了解
汉诺塔详解 以4层为例 以下为我的拙见,还希望大佬雅正 要把汉诺塔移动到c 需要把1,2,3层移到b 把4移动到c 在吧123移动到b 但是一次只能动一块 所以我们目前要做的就是把上面三块移动到b 那 ...
- c语言汉诺塔移动次数,C语言计算汉诺塔最小挪动步数 (二)
C语言计算汉诺塔最小移动步数 (二) 前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较 ...
- 汉诺塔(hanoi tower)游戏
问题 递归实现汉诺塔 算法实现 #include <stdio.h> void hanoi( int n, char a, char b, char c) {if( n > 0 ) ...
- 汉诺塔(Hanoi)问题归纳总结
一.汉诺塔问题及其递归算法 1.问题阐述 经典汉诺塔: 外文算法书对汉诺塔问题的描述: 2.算法步骤 三阶汉诺塔问题解题步骤 共需7步. 四阶汉诺塔问题解题步骤 共需15步 五阶汉诺塔问题解题步骤 可 ...
最新文章
- 开源中国源码学习笔记
- 基本类型和操作之富包装器
- redis(一)--简介
- python对数的格式_python的log使用详解
- SAP Gateway service language determination
- leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)
- 区块链人才缺口明年将达顶峰,核心开发者年入百万很正常
- python修改文件linux编码格式,使用python的chardet库获得文件编码并修改编码
- 举例让抽象问题具体化:二叉搜索树的后序遍历序列
- html 绝对位置居中,如何在div中对绝对定位元素进行居中?
- python distance matrix_Python 矩阵转置的几种方法小结
- 12月 Web 服务器调查:nginx 增长最快,微软市场份额最高
- 苹果CMSv10_全站伪静态规则教程_宝塔Linux系统
- latex中极限符号$与$$区别
- 2020年android系统版本多少,2020年的Android系统会是什么样?
- SpringBoot Banner 图片定制修改
- python matplotlib searbon 设置画版颜色 热力图固定颜色等级 固定比例尺寸大小
- Qt Windows上实现毛玻璃效果
- C语言初学 (两数相加求和)
- ELT MTK CallLog流程分析 MO/MT
热门文章
- Google Earth Engine (GEE)——利用两种方式进行EVI指数(含函数的两种定义方式)
- 【MATLAB第9期】基于MATLAB的xgboost算法安装超详细教学(踩坑避雷指南)暂时仅限于Windows系统 #末尾含源码获取链接
- 闪马智能X浙大校友会|发现不凡境界,科技塑造未来
- 第55课:60分钟内从零起步驾驭Hive实战学习笔记
- php前台源码,PHP房产中介小程序源码8.0.2 后端模块+前台小程序 解密开源版
- 数据通信,数据通信原理是什么?
- linux系统下,wps缺少windows字体的问题。
- 计算机教师个人培训建议,教师个人培训心得
- DB2 error 289
- U盘中毒之后打不开怎么办