问题概述:古代有一个梵塔,塔内有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语言——汉诺塔问题(函数递归)相关推荐

  1. c语言格式占位符可以不用吗,C语言占位符(待完善)

    %c 读入一个字符 %s 读入一个字符串,遇到空格制表符或者换行符时结束. %d 读入一个十进制整数 %x或者%X   读入一个十六进制整数(读出时,%x:小写,%X:大写) %o   读入一个八进制 ...

  2. c语言计算时钟的夹角不用if,C语言学习笔记——计算时钟的夹角

    C语言学习笔记--计算时钟的夹角 题目内容: 钟面上的时针和分针之间的夹角总是在 0 -180之间 ( 包括 0 和180 ) .举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为1 ...

  3. c语言10个评委打分不用数组,C语言编程练习题绝对经典!

    C语言编程练习 马克思手稿中有一道趣味数学题:有30个人,其中有男人.女人和小孩,在一家饭馆里吃饭 共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人.女人和小孩各有几 ...

  4. c语言10个评委打分不用数组,C语言题:十个评委给歌手打分,去掉一个最高分与最低分求最后得分...

    满意答案 ljljgc 2019.04.28 采纳率:55%    等级:12 已帮助:26454人 #include #include #define ARR_LEN 255 /*数组长度上限*/ ...

  5. c语言汉诺塔实验报告,C语言汉诺塔的简单了解

    汉诺塔详解 以4层为例 以下为我的拙见,还希望大佬雅正 要把汉诺塔移动到c 需要把1,2,3层移到b 把4移动到c 在吧123移动到b 但是一次只能动一块 所以我们目前要做的就是把上面三块移动到b 那 ...

  6. 汉诺塔小游戏 c语言

    相信大家在学习C语言嵌套的时候已经学习过经典问题汉诺塔了,我学习时就想能不能搞个汉诺塔的游戏出来,结果睡了一觉就给忘了.今天突然想起,搞出来与大家分享,水平一般,但符合汉诺塔规则.最终代码我放在文章最 ...

  7. “三色河内塔”算法(三色汉诺塔)

    问题引入 "三色河内塔"由"河内之塔"的规则衍生而来(点击查看),区别在于三色河内塔的目的是将图1所示的圆盘位置,移动成为图2所示的圆盘位置."三色河 ...

  8. python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例

    Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...

  9. 函数的返回值可以不用赋值_C语言学习|函数的应用《一》

    C语言为程序的结构提供了函数和模块 一.函数的定义与使用 <编程之道>中写道:"一个程序应该是灵活自由的.它的子过程就像串在一根线子上的珍珠."子过程在C语言中被称为& ...

最新文章

  1. 计算机控制里ddc什么缩略语,空调自动化术语和缩略语.doc
  2. 浙大绘制首个地球微生物“社会关系”网络
  3. 【RAC】RAC 实现IP访问控制
  4. python3 ipaddress模块 创建 检查 操作ip地址 简介
  5. linux 打开文件错误 too many open files 解决 ulimit 简介
  6. python乘法口诀-怎么用Python把这样的乘法口诀表打出来?
  7. hibernate二级缓存理解
  8. cmd命令大全 DOS窗口命令
  9. matlab语法手册下载,MATLAB及其在理工课程中的应用指南 第4版.pdf
  10. rabbitmq 限制速度_关于消息队列速率的解决方案
  11. 使用async读取异步数据
  12. hadoop的shuffle过程
  13. Spring的bean管理(注解注入属性)
  14. EXCEL对比重复数据
  15. Ubuntu20.04下安装nvidia驱动
  16. 尹稚:中国城镇化战略研究
  17. 现代软件工程讲义 7 设计阶段 典型用户 - 故事 - 任务 - 具体工作
  18. python容器结构 —— list - 列表篇 看这一篇就够了!
  19. 马云:每一层管理者,只需要3招| 云队友
  20. spring组合注解

热门文章

  1. @FindBy、@FindBys、@FindAll的区别
  2. linux下文件以及目录权限修改(摘抄)
  3. JavaScript 实现块级作用域
  4. 图---Dijstra
  5. 关于EGE图形库在CodeBlocks下的配置
  6. 《C程序设计语言》(第二版)要点总结
  7. PHP高级编程之消息队列
  8. 烂泥:文件服务器搭建与使用详解,minio文件服务器搭建(单机版)
  9. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识
  10. [C/C++基础知识] main函数的参数argc和argv