题目描述:

Description:

下面程序的功能是通过递归函数模拟汉诺塔游戏。请将程序补充完整。

#include<stdio.h>
void move(int,char,char,char);
int main()
{int n;scanf("%d",&n);printf("the step to moving %2d diskes:\n",n);move(n,'a','b','c');return 0;
}
//你提交的代码将放在这里

Input

盘子数n(正整数)。

Output

按照样例要求格式输出盘子移动过程。

Sample Input 1

3

Sample Output 1

the step to moving  3 diskes:
a-->c
a-->b
c-->b
a-->c
b-->a
b-->c
a-->c

经典的递归,首先,我们要了解汉诺塔问题

有a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求塔座a上的这一叠圆盘移到塔座c上,并仍按原来同样顺序叠置。在移动圆盘时应该遵守以下移动规则。
  规则(1):每次只能移动1个圆盘;
  规则(2):任何时刻都不允许将较大的圆盘压在较小的圆盘之上;
  规则(3):在满足移动规则(1)和(2)的前提下,可将圆盘移至a,b,c中任一塔座上。

分析:

那么,我们先来看看最基础的三个盘子:

起初,a柱上有从小到大编号为1,2,3的三个盘子,然后我们将1-->c,2-->b,1-->b,3-->c,1-->a,2-->c,1-->c,即可完成移动。

对于四个盘子,我们将前三个盘子看成一个整体,我们需要将这个整体移动到b,再把第四个盘子从a移动到c,最后将三个盘子组成的整体从b移动到c。需要注意的是,移动前三个盘子的方法与只有三个盘子时移动的方法是一样的。

那么,对于n个盘子,我们要把n-1个盘子构成的整体从a柱移动到b柱,再把n号盘从a柱移动到c柱,最后把把n-1个盘子从b移动到c。

我们现在回到这个题,题目要求输出移动的过程,我们只需要按照这三个步骤移动,写一个递归函数,注意递归停止条件为n==1即可。

代码如下:

#include<stdio.h>
void move(int,char,char,char);
int main()
{int n;scanf("%d",&n);printf("the step to moving %2d diskes:\n",n);move(n,'a','b','c');return 0;
}
void move(int n,char a,char b,char c)
{if(n==1) {printf("%c-->%c\n",a,c);return; }//当只有一个盘子时,直接从起始柱移到目标柱move(n-1,a,c,b);//第一步:将n-1个盘子由a移动到b,注意此时起始柱是a,中转柱是c,目标柱是b; printf("%c-->%c\n",a,c); //第二步:将盘子从起始柱移到目标柱move(n-1,b,a,c); //第三步:将n-1个盘子由b移动到c,注意此时起始柱是b,中转柱是a,目标柱是c;
}

设计递归函数模拟汉诺塔游戏相关推荐

  1. 汉诺塔游戏的python实现——递归函数

    汉诺塔游戏python实现 def move(n, a, b, c): if n == 1: print('move', a, '-->', c) else: move(n-1, a, c, b ...

  2. 递归算法 —— Hanoi汉诺塔游戏

    前言 博客主页:干脆面la的主页 gitte链接:干脆面la的gitee仓库 刚学习完递归函数接触汉诺塔问题的时候,汉诺塔问题困扰了我很久.博主花了很长时间理解这道题目,因此整理出了用递归解决汉诺塔问 ...

  3. 汉诺塔python递归函数_关于python递归函数实现汉诺塔

    def move(n,a,b,c):              #1 if n==1:                    #2 print(a,'-->',c)        #3 else ...

  4. 用python编写一个汉诺塔的移动函数_关于python递归函数实现汉诺塔

    def move(n,a,b,c):              #1 if n==1:                    #2 print(a,'-->',c)        #3 else ...

  5. c语言 汉诺塔游戏下载,使用C语言解决益智游戏——“汉诺塔”

    说明: 文章所有内容截选自实验楼教程[3个C语言实例带你掌握递归方法论],教程里还有两个实例,感兴趣的可以点击查看: 文章主要是带你通过解决这个游戏来利用递归解决实际问题并掌握其核心思想,懂得如何使用 ...

  6. 基于FPGA的汉诺塔游戏

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...

  7. c#语言编写汉诺塔游戏,c# 实现汉诺塔游戏

    汉诺塔游戏一旦掌握了规律,其实是有点单调和无聊的,不过却是学习递归的一个绝佳例子,想当初学习老谭C的时候,就卡在这儿好长时间. 对初学编程的人来说,递归本身就不易理解,如果使用C语言没有好的调试环境就 ...

  8. python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧

    汉诺塔游戏:看谁能在短时间内将排好顺序的圈,按同样的顺放在另一根柱子上,每次只能动一个. 今天用python搭建汉诺塔小游戏(简约版) 代码亲测有效!源代码如下: #左中右塔用一个列表存储 left ...

  9. 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现

    递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...

  10. Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏

    Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...

最新文章

  1. Linux底层函数库“glibc”再现重大安全漏洞
  2. docker mysql 主从库配置
  3. python requests下载文件很慢-python requests 下载大文件不完整
  4. 神经网络输出数量对迭代次数的影响
  5. css元素居中方法归纳
  6. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
  7. Android 截图,截取指定view截图
  8. dedecms联动筛选_DEDECMS分类信息按联动类别筛选的实现方法
  9. Windows + IDEA + SBT 打造Spark源码阅读环境
  10. qcow2镜像转换为iso_电子数据镜像格式的转换,以qcow2转raw为例
  11. hdu 6203 ping ping ping(贪心+树状数组+dfs序)
  12. ANDROID 高性能图形处理 之 OPENGL ES
  13. 【图像隐写】基于matlab DCT数字水印嵌入+检测+攻击(测试鲁棒性)【含Matlab源码 1133期】
  14. IDEA 配置Java环境
  15. mysql max as_mysql使用max函数+将类似123的字符型数据转换成数据类型
  16. GDI+ BMP转JPG
  17. 如何将FLV格式视频转换成高清MP4格式方法
  18. Java基础小项目shopping
  19. apple watch更新系统时出现红色感叹号解决方法
  20. c语言coin函数库,Coin Test | C/C++程序员之家

热门文章

  1. 《百度输入法》导致EXCEL 无法使用快捷键Ctrl+;插入日期
  2. Qos服务质量与IntServ和DiffServ
  3. 当AI有了“自由意志”
  4. 新闻接口调用之新浪滚动新闻
  5. 洛谷 P3939 数颜色(主席树)
  6. python动态网页爬取——四六级成绩批量爬取
  7. 滕振宇谈如何进行单元测试
  8. 用非门74HC04与无源晶振产生时钟信号的两种电路
  9. 产品读书《长尾理论》
  10. 捷达vs7测试_抢先测试捷达VS7!你期待吗