基于C语言和递归思想实现汉诺塔
汉诺塔是源于印度一个古老传说的益智玩具。
传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
运行以下代码后归纳可得:转移N个圆盘需要移动2N-1次。
所以,婆罗门一共需要移动圆盘264-1次。
试玩这个小游戏,体验婆罗门的绝望:http://www.4399.com/flash/109504_1.htm
//hanoi.c#include<stdio.h>//#汉诺塔(hanoi)#
//有A B C三个木桩。
//木桩A上有N个圆盘,编号1到N,按编号从上往下排列,小在上,大在下。木桩B和C上是空的。
//问题:如何把A上的圆盘都移到C上,圆盘要仍然按原来的顺序排列。
//规则:可以借助B;每次只能移动一个顶端圆盘;不能将编号大的圆盘压在编号小的圆盘上。void hanoi(int, char, char, char);int main() {int n;char a = 'A';char b = 'B';char c = 'C';printf("请输入汉诺塔圆盘数:");scanf_s("%d", &n);hanoi(n, a, b, c);return 0;
}void hanoi(int n, char A, char B, char C) {if (n == 1) {printf("将编号为%d的圆盘从%c移到%c\n", n, A, C);}else {hanoi(n - 1, A, C, B);printf("将编号为%d的圆盘从%c移到%c\n", n, A, C);hanoi(n - 1, B, A, C);}
}
//函数hanoi的逻辑:
//n表示圆盘数,ABC代表将一定数量的圆盘从A借助B移到C上。
//如果 只有1个圆盘,
//则直接将A上的圆盘移到C上。
//否则 先将A上的n-1个圆盘借助C移到B上,
//再将A上剩余的最后1个圆盘移到C上,
//最后将B上的n-1个圆盘借助A移到C上。
本文代码运行环境为Visual Studio Community 2019 16.4.6版本。
代码内容主要来自郝斌老师的课程https://www.bilibili.com/video/av6159200
如有疑问或建议,欢迎留言讨论。
基于C语言和递归思想实现汉诺塔相关推荐
- C语言递归思想实现汉诺塔
目录 1.递归思想简介 2.汉诺塔问题 3.汉诺塔递归的c语言实现 1.递归思想简介 在c语言中,程序调用自身的编程技巧称为递归( recursion). 递归的定义看上去似乎很抽象,使用代码描述能够 ...
- 深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。
目录 序言: 一.函数递归( recursion) 二.递归的两个必要条件 三.递归小问题 (1)接受一个整型值(无符号),按照顺序打印它的每一位 (2)编写函数不允许创建临时变量,求字符串的长度(利 ...
- 递归(二)-------经典递归实例(汉诺塔问题)
2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章讨论一个经典的递归实例(Fibonacy数列问题),现在来讨论一下另外一个经典的递归例子:汉诺塔问题: 问题描述:在 ...
- C语言编程求解圆盘的汉诺塔,课内资源 - 基于80x86汇编的汉诺塔
一.软件背景介绍 我们今天要陈述的应用叫做汉诺塔,大家可能小时候都接触过类似于鲁班锁,九连环的益智玩具,我们要说的汉诺塔其实也可以说是益智玩具的一种. 下面我们具体介绍一下汉诺塔.汉诺塔有三根杆子A, ...
- C语言递归小游戏—汉诺塔(hanoi)
前言: 汉诺塔大家都不陌生吧,在猩球崛起这个电影里,人们通过凯撒玩汉诺塔知道了它的智商增高了,这个益智小游戏的规则就是: 汉诺塔(Tower of Hanoi),又称河内塔.是一个源于印度古老传说的益 ...
- JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。
接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...
- 个盘子的汉诺塔需要移动几步_坨——理解递归实现quot;汉诺塔quot;代码的关键...
我记得,大学学C语言时,在函数递归调用那一节有个作业,就是写汉诺塔.不少同学遭遇到困难.在知乎上遇见的就有: 如何理解汉诺塔的递归?www.zhihu.com 题主发出悲鸣:"--学C++ ...
- 汉诺塔python创新设计_递归经典案例汉诺塔 python实现
最近在廖雪峰大神的教程学习python 学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,因此本人以为能够写篇博客来表达一下本身的看法.这markdown编辑器还不怎么会 ...
- 堆栈思想案例—汉诺塔问题求解最小步数
文章目录 前言 一.何为汉诺塔 二.问题分析 三.算法实现 前言 汉诺塔是一款有趣的智力游戏,其求解问题在数据结构与算法中也是堆栈思想和递归思想的典型案例. 一.何为汉诺塔 如图所示:有A.B.C三个 ...
最新文章
- centos7 install 安装mysql
- 微型计算机系统结构的五大基本组成部件,连接计算机系统结构的五大基本组成部件...
- 5G最完整的PPT教材
- GDI+ 学习记录(3): 虚线画笔 - Dash
- 机器学习(MACHINE LEARNING)MATLAB经济金融领域简单数学模型和分析
- linux centos7修改默认启动的内核(升级及切换内核)
- VTK:可视化之RotateActor
- open external url via transaction launcher sina baidu google web
- android 图片缓存工具类,Android工具类系列-Glide图片缓存与圆角
- 算法之排序算法-shell排序(交换法)
- linux-ntpdate同步更新时间
- 耗时1周!精选22G超超超适合产品经理的《数据分析》学习资源,抓紧保存!限时2天删除~...
- 查成语--每天10行python代码系列!
- 23种设计模式JAVA案例
- Java开发常用英语单词表
- word/论文版本管理方案
- Pytorch实战:用经典网络实现猫狗大战
- java技术--SOA架构
- ConstrainLayout约束布局
- visio的vsd文件转eps图流程
热门文章
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOT
- CocosCreator 原生开发环境配置(JavaSDK,Android Studio,Python,豌豆荚,真机实测)
- Google Earth Engine(GEE)——Landsat 7条带色差修补
- 嵌入式环境搭建之ssh
- Widnows本地搭建WebDav服务,并内网穿透公网可访问
- AutoCompleteTextView使用
- 信号与系统仿真实验——实验一 连续系统时域分析的MATLAB实现
- 计算机考试有专业知识要求吗,事业单位考试中的计算机知识具体指什么,难考吗...
- python爬虫初战之小说爬取
- 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...