c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)
问题概述:古代有一个梵塔,塔内有3个座A,B,C。开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上,有一个老和尚想把64个盘子从A座移动到C座,但是规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动的过程中可以利用B座。(写出移动的步骤)。
问题分析:在这个问题中,我们先来看如果盘子总量n=3时的情况,因为最终要将盘子移动到C中,所以最终情况一定是最大的第3个盘子在C上,然后再将前两个在B上的盘子移动到C上,如何将前两个盘子移动到B上呢?就是要将此时最大的第二个盘子移动到B上,然后将第一个盘子从A移动到B上,实现了两层函数的递归。总结:问题分为三步:1,将最大的盘子前面的n-1个移动到B上,将最大的盘子移动到C上,然后将B上的n-1个移动到C上。这三步中的第一步操作步骤为:将n-2个盘子移动到C上,将最大的盘子移动到B上,然后将第n-2个盘子移动到B上,第三步的操作步骤为:将n-2个盘子移动到A上,将第n-2个盘子移动到C上,再将前面n-2个盘子移动到C上。这三步中第一步操作步骤为:将n-3个盘子移动到B上,将最大的盘子移动到C上,然后将第n-3个盘子移动到C上,以此类推。在步骤中涉及参数的改变和函数的递归问题。以4个盘子为例做出流程图如下:
问题代码:
#include
void Hanoi( int n, char a, char b, char c);//汉诺塔函数声明
void Move( int n, char a, char b);//输出操作步骤函数的函数声明
int count;
int main()
{
int n=8;
printf ( "汉诺塔的层数:\n" );
scanf ( " %d" ,&n);
Hanoi(n, 'A' , 'B' , 'C' );
return 0;
}
void Hanoi( int n, char a, char b, char c)
{
if (n == 1)
{
Move(a, c);
}
else
{
Hanoi(n - 1, a, c, b);//因为最终要将所有盘子移动到C上,所以将B,C进行形式互换//
Move(n, a, c);
Hanoi(n - 1, b, a, c);//和第一步同理//
}
}
void Move( char a, char b)
{
count++;
printf ( "第%d次移动 Move: Move from %c to %c !\n" ,count,a,b);
}
c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)相关推荐
- c语言格式占位符可以不用吗,C语言占位符(待完善)
%c 读入一个字符 %s 读入一个字符串,遇到空格制表符或者换行符时结束. %d 读入一个十进制整数 %x或者%X 读入一个十六进制整数(读出时,%x:小写,%X:大写) %o 读入一个八进制 ...
- c语言计算时钟的夹角不用if,C语言学习笔记——计算时钟的夹角
C语言学习笔记--计算时钟的夹角 题目内容: 钟面上的时针和分针之间的夹角总是在 0 -180之间 ( 包括 0 和180 ) .举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为1 ...
- c语言10个评委打分不用数组,C语言编程练习题绝对经典!
C语言编程练习 马克思手稿中有一道趣味数学题:有30个人,其中有男人.女人和小孩,在一家饭馆里吃饭 共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人.女人和小孩各有几 ...
- c语言10个评委打分不用数组,C语言题:十个评委给歌手打分,去掉一个最高分与最低分求最后得分...
满意答案 ljljgc 2019.04.28 采纳率:55% 等级:12 已帮助:26454人 #include #include #define ARR_LEN 255 /*数组长度上限*/ ...
- c语言汉诺塔实验报告,C语言汉诺塔的简单了解
汉诺塔详解 以4层为例 以下为我的拙见,还希望大佬雅正 要把汉诺塔移动到c 需要把1,2,3层移到b 把4移动到c 在吧123移动到b 但是一次只能动一块 所以我们目前要做的就是把上面三块移动到b 那 ...
- 汉诺塔小游戏 c语言
相信大家在学习C语言嵌套的时候已经学习过经典问题汉诺塔了,我学习时就想能不能搞个汉诺塔的游戏出来,结果睡了一觉就给忘了.今天突然想起,搞出来与大家分享,水平一般,但符合汉诺塔规则.最终代码我放在文章最 ...
- “三色河内塔”算法(三色汉诺塔)
问题引入 "三色河内塔"由"河内之塔"的规则衍生而来(点击查看),区别在于三色河内塔的目的是将图1所示的圆盘位置,移动成为图2所示的圆盘位置."三色河 ...
- python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例
Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...
- 函数的返回值可以不用赋值_C语言学习|函数的应用《一》
C语言为程序的结构提供了函数和模块 一.函数的定义与使用 <编程之道>中写道:"一个程序应该是灵活自由的.它的子过程就像串在一根线子上的珍珠."子过程在C语言中被称为& ...
最新文章
- 计算机控制里ddc什么缩略语,空调自动化术语和缩略语.doc
- 浙大绘制首个地球微生物“社会关系”网络
- 【RAC】RAC 实现IP访问控制
- python3 ipaddress模块 创建 检查 操作ip地址 简介
- linux 打开文件错误 too many open files 解决 ulimit 简介
- python乘法口诀-怎么用Python把这样的乘法口诀表打出来?
- hibernate二级缓存理解
- cmd命令大全 DOS窗口命令
- matlab语法手册下载,MATLAB及其在理工课程中的应用指南 第4版.pdf
- rabbitmq 限制速度_关于消息队列速率的解决方案
- 使用async读取异步数据
- hadoop的shuffle过程
- Spring的bean管理(注解注入属性)
- EXCEL对比重复数据
- Ubuntu20.04下安装nvidia驱动
- 尹稚:中国城镇化战略研究
- 现代软件工程讲义 7 设计阶段 典型用户 - 故事 - 任务 - 具体工作
- python容器结构 —— list - 列表篇 看这一篇就够了!
- 马云:每一层管理者,只需要3招| 云队友
- spring组合注解
热门文章
- @FindBy、@FindBys、@FindAll的区别
- linux下文件以及目录权限修改(摘抄)
- JavaScript 实现块级作用域
- 图---Dijstra
- 关于EGE图形库在CodeBlocks下的配置
- 《C程序设计语言》(第二版)要点总结
- PHP高级编程之消息队列
- 烂泥:文件服务器搭建与使用详解,minio文件服务器搭建(单机版)
- [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识
- [C/C++基础知识] main函数的参数argc和argv