C语言 - 汉诺塔详解(最简单的方法,进来看看就懂)
文章目录
- 一.什么是汉诺塔?
- 二.如何实现捏?
- 三.如何写代码?
- 四.为什么需要移动 2^n - 1 次/
一.什么是汉诺塔?
汉诺塔起源于印度的一个古老传说,传说是什么不重要。重要的是它是怎么实现的以及代码是怎么写的。
是这样的,总共有 3 个柱子,第一个柱子上有 n 个圆盘,圆盘的大小由下到上依此递减。
以 n = 3为例
大概就是这么个东西。
我们要做的就是利用第二个柱子把第一个柱子上的所有圆盘放到第三个柱子上,在移的过程中大盘子不能放在小盘子上。
二.如何实现捏?
假如有 n 个盘子
我们要将这 n 个盘子移到第三个柱子上,先需将前 n-1 个盘子移到第二个柱子上,再将第 n 个盘子移到第三个柱子上,最后将这 n 个盘子移到第三个柱子上。
要将这 n-1 个盘子移到第三个柱子上,先需将前 n-2 个盘子移到第二个柱子上,再将第 n-1 个盘子移到第三个柱子上,最后将这 n-1 个盘子移到第三个柱子上。
以此类推。。。
所以,不难看出,汉诺塔的问题本身是一个大问题,我们可以将这个大问题转化为许多个相似的小问题来进行解决。若要将一个大问题转化为许多个相似的小问题来解决,我们就需要用到递归了。
三.如何写代码?
在写汉诺塔的时候不能过于关注函数内部是如何实现的,只需知道它的逻辑即可。如果过于关注函数内部是如何实现的,那么这个问题是很难解决的。
#include <stdio.h>void hanoi(int n, char pos1, char pos2, char pos3)
{if (n == 1){printf("%c->%c ", pos1, pos3);}else{hanoi(n - 1, pos1, pos3, pos2);printf("%c->%c ", pos1, pos3);hanoi(n - 1, pos2, pos1, pos3);}
}int main()
{int n = 0;scanf("%d", &n);hanoi(n,'A','B','C');return 0;
}
四.为什么需要移动 2^n - 1 次/
C语言 - 汉诺塔详解(最简单的方法,进来看看就懂)相关推荐
- 汉诺塔详解(超详细)
递归算法求汉诺塔(C语言版) 汉诺塔: 梵天创造世界的时候做了三根金刚石柱子,x y z三根柱子 在x柱子上 从上往下按照从小到大顺序摞着64片黄金圆盘. 梵天命令婆罗门把圆盘从x柱移到z柱 并且规定 ...
- 汉诺塔详解(包看包会)
CSDN的大佬已经解释了很多了,由我这个菜鸟反复理解后得到的一些心得的分享 先看题: 汉诺塔: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根 ...
- 算法笔记 —— 汉诺塔详解
文章目录 一.问题来源 二.小游戏体验 三.思路分析 四. 程序实现 一.问题来源 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号X.Y.Z),在 ...
- 汉诺塔详解过程和递归思想及举例(python代码)
省略问题描述- 但我们知道64个盘子的移动次数是18 446 744 073 709 551 615这是一个天文数字 解决办法: 我们最终解决的问题就是将a柱子原来由大到小从下到上排好序的圆盘通过b柱 ...
- python递归汉诺塔详解_汉诺塔在python中递归,理解磁盘目的地的变化
我正在努力提高我对python中hanoi之塔递归解决方案代码的理解. 此代码:def moveTower(height,fromPole, toPole, withPole): if height ...
- c语言汉诺塔实验报告,C语言汉诺塔的简单了解
汉诺塔详解 以4层为例 以下为我的拙见,还希望大佬雅正 要把汉诺塔移动到c 需要把1,2,3层移到b 把4移动到c 在吧123移动到b 但是一次只能动一块 所以我们目前要做的就是把上面三块移动到b 那 ...
- c语言 汉诺塔游戏下载,使用C语言解决益智游戏——“汉诺塔”
说明: 文章所有内容截选自实验楼教程[3个C语言实例带你掌握递归方法论],教程里还有两个实例,感兴趣的可以点击查看: 文章主要是带你通过解决这个游戏来利用递归解决实际问题并掌握其核心思想,懂得如何使用 ...
- c语言汉诺塔移动次数,C语言计算汉诺塔最小挪动步数 (二)
C语言计算汉诺塔最小移动步数 (二) 前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较 ...
- 汉诺塔算法 c语言实验报告,C语言汉诺塔算法原理分析与实践
汉诺塔游戏的规则:如下图所示,有三个柱子A,B,C,我们要做的是把A柱的所有圆盘,全部转移到C柱上,转移时遵循的规则如下: 1.每次只能移动一个圆盘 2.所有的大圆盘必须在小圆盘的下面 首先假设只有一 ...
最新文章
- linux oracle修改编码utf8
- [转]中国CIO的空前机会和空前责任
- SuperMap导航条控件设置
- 第 3 章 镜像 - 018 - 镜像命名的最佳实践
- mysql 分类_MYSQL数据类型分类
- informatica mysql odbc_Informatica 配置mysql community odbc连接
- PyQt5+PIL模块实现图片批量处理器
- Kava下一阶段Kava 5主网将于3月4日上线
- 常用命令-JAVA大数据-Week5-DAY2-linux
- WorldFirstClassOnline
- 三、运算符、表达式和语句
- 传奇私服DBC2000合并数据库时删除重复Name关键字SQL指令
- 新的默认设置:Sass颜色同义词库
- Linux history命令
- JPA学习笔记之接口JpaRepository 和 JpaSpecificationExecutor的简单使用
- UI recorder 自动化UI测试框架使用手册
- win7升级ie到ie10后打不开的解决办法
- mysql多对多关系的理解,由一对多看向多对多
- 为什么到苹果官方售后更换电池,要求用户退出ID呢?
- 贵安新区打造“三链融合”大数据核心区