汉诺塔问题(解出来了带你看洛丽塔)

简介: 汉诺塔问题(解出来了带你看洛丽塔)

目录

🍉前言

🍊什么叫汉诺塔

🍑汉诺塔移动过程分析

🍓汉诺塔移动次数分析

🥝具体代码分析

🍇总结


🍉前言

上期文章我们对c语言中的冒泡排序进行了详细的分析,对于什么是冒泡排序,冒泡排序的思想,怎么实现它进行了分析,让大家对冒泡排序有了清晰的认识。接下来会对汉诺塔问题进行讲解,大家可以端上小板凳了。

🍊什么叫汉诺塔

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。这就是汉诺塔的来源,现在逐渐演变成了一个益智游戏。大家可以想一想,移动这64片圆盘需要多少次呢?今天我们就用函数的递归来实现一下。

🍑汉诺塔移动过程分析

汉诺塔的规则是:有abc三根柱子,要a柱子上的盘子都移动到c盘上。要求是每次只能移动一个,且大盘子要在小盘子的下面。这里我们以三阶汉诺塔为例来进行分析,通过分析我们可以发现可以分为三步:第一步 将n-1个通过c柱子移动到b柱子 第二步 将第n个移动到c柱子 第三步 将n-1个通过a柱子移动到c柱子

🍓汉诺塔移动次数分析

对于这么难以计算的问题,我们可以通过穷尽法来从中找规律:

阶层

次数

规律

1

1

2^1-1

2

3

2^2-1

3

7

2^3-1

4

......

n

15

......

......

2^4-1

......

2^n-1

通过穷尽法,我们发现,这个汉诺塔的移动次数是成指数增长的。当有64个盘子时,我们需要移动2^64次=18446744073709551616次,如果一次一秒,婆罗门要移动5833亿年!

n阶移动的次数:和上面说的可分为三步,可以把步骤一将n-1个通过c柱子移动到b柱子的次数为f(x-1),步骤二为1,步骤三n-1个通过a柱子移动到c柱子的次数也为f(x-1). 这n的次数为2*F(x-1)-1;

🥝具体代码分析

用函数递归求移动的次数

用函数递归打印移动的过程


🍇总结

我们可以发现在思考汉诺塔这样的问题的时候,在脑子里想是很难想明白的。这时我们就需要借助图形在宏观的帮助我们了解 ,使问题清晰化。

目录
相关文章
|
测试技术 对象存储
大量执行OSS PutObject时卡住的问题排查
##问题反馈 接到有客户反馈,在批量putobject时,发现上传到一定数量后应用卡住了,同时句柄数增加明显。 客户表示 1.使用10个worker线程进行put操作。 2.每个线程独立使用OssClient。 3.OssClient没有执行shutdown ##排查过程 根据客户的描述,写了一个类似的程序来进行复现 开启五个线程,每个线程上传10000次object来测试
5067 0
|
3月前
|
机器学习/深度学习 传感器 数据采集
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)
537 0
|
安全 Linux 应用服务中间件
[笔记]CentOS7 vsftpd安装及配置使用
[笔记]CentOS7 vsftpd安装及配置使用
1159 0
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
568 0
|
供应链 Cloud Native 数据管理
云计算在企业数字化转型中的关键作用及最佳实践
云计算重塑企业数字化转型,提供弹性、可扩展的计算平台,降低成本,提升运营效率和客户体验。其优势包括成本效益、灵活性、高可用性及创新加速。企业应制定云计算战略,开发云原生应用,采用混合云架构,并注重数据安全与合规。案例中,一制造企业通过云计算实现全球业务统一,简化供应链,加速产品创新,优化生产并保障数据安全。
|
存储 安全 API
GitHub主要仓库泄露访问令牌,代码与云环境面临风险
GitHub主要仓库泄露访问令牌,代码与云环境面临风险
GitHub主要仓库泄露访问令牌,代码与云环境面临风险
|
数据可视化 UED
移动应用的UI/UX设计原则与实践
【7月更文挑战第2天】移动应用UI/UX设计聚焦简约、一致性与用户中心原则。关键在于理解用户需求,创建清晰的视觉层次,实现响应式布局。UX关注反馈速度、情感连接及无障碍访问。通过用户调研、原型测试和持续迭代,提升满意度和产品竞争力。
|
消息中间件 数据采集 关系型数据库
离线数仓(三)【业务日志采集平台搭建】(2)
离线数仓(三)【业务日志采集平台搭建】
|
机器学习/深度学习 自然语言处理 TensorFlow
|
设计模式 数据可视化 编译器
【Qt】—— Qt Creator 创建项目
【Qt】—— Qt Creator 创建项目
437 0