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

  可以看出,汉诺塔游戏每增加一个圆盘,他的游戏难度就更高。在现在,完全可以使用计算机中函数的递归来实现它的操作

  算法分析:

三根杆子 x,y,z
汉诺塔的求解过程:
n是碟子数
第一步:将n-1个由x经z移动y上
第二步:将第n个移动到z杆
第三步:将剩余n-1个碟子由y杆经x杆移动到z杆

不难发现,他的通关过程就是3个规律,因此只需要结合这3规律 利用函数递归就可以轻易实现解法

代码实现

#include<stdio.h>
void hanio(int n,char x,char y,char z);
void move(char a1, char a2);
int main()
{
int n;
printf("please enter plate number\n");
scanf("%d", &n);
hanio(n, 'x', 'y', 'z');
return 0;
}
void hanio(int n, char x, char y, char z)
{
if (n == 1)
{
move(x, z);
}
else
{
hanio(n - 1, x, z, y);
move(x, z);
hanio(n - 1, y, x, z);
}
}
void move(char a1,char a2)
{
printf("%c-->%c\n", a1, a2);
}

(c语言描述 函数递归汉诺塔)的更多相关文章

  1. 递归:汉诺塔 - 零基础入门学习Python024

    递归:汉诺塔 让编程改变世界 Change the world by program 似乎谈到递归算法就要拿汉诺塔来举例,没办法,因为小甲鱼小时候太笨了,这个游戏老是玩不过关,好不容易在自学编程的时候 ...

  2. C语言 递归 汉诺塔问题 最大公约数问题

    函数不能嵌套定义,但能嵌套调用(在调用一个函数的过程中再调用另一个函数) 函数间接或直接调用自己,称为递归调用  汉诺塔问题 思想:简化为较为简单的问题 n=2 较为复杂的问题,采用数学归纳方法分析 ...

  3. python递归——汉诺塔

    汉诺塔的传说 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了 ...

  4. 【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

  5. js 递归 汉诺塔的例子

    程序调用自身的编程技巧称为递归. //汉诺塔的游戏,n为圆盘编号数量,编号,a,b,c代表的是三个柱子 var hanio=function(n,a,b,c){     if(n>0){    ...

  6. python 递归-汉诺塔

    # 汉诺塔 a = "A" b = "B" c = "C" def hano(a, b, c, n): if n == 1: print(& ...

  7. Python使用函数模拟“汉诺塔”过程

    运行效果: 源代码: 1 # -*- coding:utf-8 -*- 2 ##汉诺塔游戏开始 3 _times=0 #用于统计移动次数 4 def hannuota(nlist,mfrom,mpas ...

  8. PKU《程序设计》专项课程_递归汉诺塔问题

    取自coursera.org上公开课北京大学<C程序设计进阶> 递归调用注意的点 1.关注点放在求解的目标上,递推是,目标放在开头 2.找到第N次和第(N-1)次之间的关系,通项公式 3. ...

  9. COJ 0026 汉诺塔问题

    汉诺塔问题 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK ...

  10. 【GDKOI2004】汉诺塔

    题目描述 古老的汉诺塔问题是这样的:用最少的步数将N个半径互不相等的圆盘从1号柱利用2号柱全部移动到3号柱,在移动的过程中小盘要始终在大盘的上面. 现在再加上一个条件:不允许直接把盘从1号柱移动到3号 ...

随机推荐

  1. 删除v-for方法生成的组件的方法

    一.思路 在vue:data中的数据对象添加布尔类型的属性,用来表明其是否被渲染,如果需要删除组件,就把这个属性设置为false: 在计算属性vue:computed中,根据该布尔属性过滤,生成一个新 ...

  2. 实践:腾讯云COS备份本地数据以及异地备份

    在当前大数据时代背景下,数据在业务中占有不可低估的地位,数据备份已然成为了最后一道屏障. 腾讯云对象存储COS,提供数据备份.共享.大数据处理.线上数据托管一站式解决方案,成为了不少企业和个人用户备份 ...

  3. allure安装成功后,执行未生成报告解决

    在搜索了很多方法尝试后,执行依然没有生成测试报告,在尝试在pycharm里面修改配置解决了: file>setting>tools>Python integrated tools&g ...

  4. iOS开发 WKWebView实现JS交互

    需求:利用webView加载H5页面,并实现点击H5页面的按钮触发事件,事件是调用OC的方法.简单说就是JS调用OC的方法,这里我们选择的是WKWebView,至于为什么不用UIWebView,自行百 ...

  5. 4. 模板解析,生成render函数,渲染页面

    解析模板,生成render函数,执行render函数,实现视图渲染 1.模板转化成ast语法树 2.ast语法树生成render函数 3.执行render函数生成虚拟dom 4.执行_update方法 ...

  6. locust socektio协议压测

    # -*-coding:UTF-8 -*- from locust import HttpLocust, TaskSet, task, TaskSequence, Locust, events imp ...

  7. SecPoint Port Scanner v4.0

    SecPoint Port Scanner v4.0 Usage: portscanner <IP> or <hostname> [options] 选项: -p <st ...

  8. 记录[极客大挑战2019]http

    打开网站源码--找到secret.php,要从www.Sycsecret.com访问--加上Referer 注:HTTP Referer是header的一部分,当浏览器发送请求的时候带上Referer ...

  9. 如何使用Antd的图片上传组件

    html结构如下 <a-upload v-model:file-list="fileList" //已经上传的文件列表(受控) name="avatar" ...

  10. 2022-07-11 第一小组 张明旭 前端JS学习记录

    今天是正式学习的第三天,每天一大部分前端的新知识,吐瘦两斤,听课晕乎乎的.不过小事,靠笔记和视频苟活 知识点: JavaScript是什么? 编程语言.脚本语言.依赖于某种容器(浏览器)运行 有浏览器 ...