汉诺塔c语言实现及分析
目录
起源
c语言实现
起源
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
一次只移动一片,不管在哪根针上,小片必须在大片上面。
c语言实现
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>static int count = 0;//计数器void move(int n,char A,char C){printf("将%d号盘子从%c移动到%c\n", n, A, C);count++;}void hannio(int n, char A, char B, char C){int count = 0;int i = 0;if (n == 1){move(n,A,C);printf("将%d号盘子从%c移动到%c\n", n,A,C);}else{hannio(n - 1,A,C,B);//借助C将n-1个从A移到Bmove(n, A, C);//将最大那个从A移到Channio(n - 1, B, A, C);//借助A将n-1个从B移到C}}int main(){char ch1 = 'A';char ch2 = 'B';char ch3 = 'C';int n = 0;scanf("%d", &n);hannio(n,'A','B','C');printf("总共移动%d次\n", count);return 0;}//代码分析://n = 3为例//n = 3不满足n = 1条件, 进入else//hannio(3, A, B, C) A - A B - B C - C// hannio(2, A, C, B) A - A B - C, C - B 此时B里面是C, C里面是B// hannio(1, A, C, B) A - A B - B C - C// printf 将1号从A移动到C n = 1 执行if语句// printf("将%d号盘子从%c移动到%c\n", n, A, C)此时n为2 A - A B - C, C - B 将2号从A移到B// hannio(1, B, A, C); B里面存放的是C, A里面存放的是A, C里面存放的是B 把C传给A, 把A传给B, 把B传给C A - C B - A C - B// printf 将1号从A移到C 即从C移到B//printf n = 3执行完毕, 此时n = 3, 将3号从A移到C// hannio(2, B, A, C) A-B B-A C-C// hannio(1, A, C, B) A-B B-C C-A A里面是B赋给A C里面是C赋给C B里面是A赋给C// printf 将1号从B移到A// printf 此时n=2 将2号从B移到C// hannio(1, B, A, C); A-A B-B C-C 将一号从A移到C
将1号盘子从A移动到C
将1号盘子从A移动到C
将2号盘子从A移动到B
将1号盘子从C移动到B
将1号盘子从C移动到B
将3号盘子从A移动到C
将1号盘子从B移动到A
将1号盘子从B移动到A
将2号盘子从B移动到C
将1号盘子从A移动到C
将1号盘子从A移动到C
总共移动7次
汉诺塔c语言实现及分析相关推荐
- c语言程序代码应缩进几格,汉诺塔c语言程序代码
汉诺塔c语言程序代码(通过vc++6.0验证)(附讲解) 让我们先看看代码吧 #include int hj(int a,int b, int c,int i) { int t; if(i==1) p ...
- 汉诺塔c语言源程序步骤,汉诺塔问题的算法分析及C语言演示程序的实现
摘要:该文对经典的"汉诺塔"问题进行了详细的分析,并用C语言实现.通过问题的具体实现,使学习者了解问题的全过程,推广到一般. 关键词:汉诺塔;递归;C语言 中图分类号:TP301. ...
- 汉诺塔问题的求解与分析
一.递归算法介绍 这篇文章讲的是一个古老而又经典的汉诺塔问题,他是递归算法的一个很好的应用实例.有关递归函数的介绍,在使用递归函数求解字符串的逆置问题文章中介绍过.递归思想是来解决可计算问题的,他的根 ...
- 汉诺塔C语言递归实现
相信每一次学习C语言的同学都会遇到获诺塔问题,我学习C语言也已经有一段时间了,最近遇到了这个经典的问题,下面来总结一下!! 盘子个数n 步骤次数 1 1 2 3 3 7 4 15 ...... ... ...
- HDOJ 汉诺塔系列(递推分析)
汉诺塔V http://acm.hdu.edu.cn/showproblem.php?pid=1995 设当有N个盘子时,第i个盘子从一个柱子移到另一个柱子需要移动的步数为f[n,p],则有:当N=p ...
- 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘
汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.借助c杆将所有的圆盘移到b杆上,每次只能移一个,且小的盘子一定在大的盘子上面 它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上 ...
- 递归 汉诺塔 C语言
# include <stdio.h>/* 递归:条件:1. 有正确(明确)的终止条件2. 该函数处理的数据规模必须递减3. 这个转化必须是可解的特点:易于理解速度慢存储空间大1.汉诺塔( ...
- 四柱子汉诺塔c语言程序代码,汉诺塔n=4(4个盘)c语言递归编程代码
满意答案 /**************************** 汉诺塔的算法就3个步骤: 第一,把a上的n-1个盘通过c移动到b. 第二,把a上的最下面的盘移到c.a成了空的. 第三,因为n-1 ...
- 汉诺塔c语言执行步骤详解,详解汉诺塔执行过程
问题补充: 能否从以下开始详细像上面那样说明一下程序的运行过程吗?本人主要不知道函数的运行过程. 返回B第一次调用 6,向下执行,执行完毕,返回A第一次调用 7,本次函数中p=a,q=b,r=c,m= ...
最新文章
- 笔记-项目质量管理-过程决策程序图法
- python登录代码思路_终于找到一个思路比较清晰的可以模拟登录百度的代码!
- JS window对象 Location对象 location用于获取或设置窗体的URL,并且可以用于解析URL。 语法: location.[属性|方法]...
- 有了商城源码如何部署到本地服务器_怎么将本地做好的网站部署到服务器上?...
- SpringBoot中fastJson返回数据展示null字段(响应值为null时字段被过滤)
- Linux关机运行的脚本,Linux 关机 脚本
- testbench文件显示波形_modelsim仿真没有波形或看不到波形的原因及解决方法 - 全文...
- 在Power BI Desktop中实施星型架构
- 加入rtp组播_耗时10+小时撰写 带你系统认识组播 收藏这些概念
- 3h精通OpenCV(三)-重调大小与图像裁剪
- C# 自定义网格 dataGridView 禁止编辑 + 禁止自动生成新列 + 禁止生成新行 + 禁止删除行 + 禁止多选 + 禁止行选中 + 禁止改变列宽度 行高度
- Flash CS6 专业版破解教程、Flash CS6 激活序列号、破解补丁
- 英雄联盟一直连接不上服务器连接异常,lol服务器连接异常 英雄联盟老是与客户端失去连接...
- mmclassification使用步骤与心得/ACCV实验记录
- 人车交叉作业预警系统
- 用JAVA写出1到999的随性化数_OO第一单元——谜之随性总结
- Android悬浮窗初探声音处理相关总结
- 2021美亚杯个人赛记录
- 如何在网站左侧和右侧的漂浮图片上添加QQ咨询、旺旺、微博、电话?
- 红警代码在GitHub竟然开源了,很强!