当前位置: 首页 > article >正文

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

 

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。

🥰内容专栏:这里是《算法详解》,笔者用重金(时间和精力)打造,将算法知识一网打尽,希望可以帮到读者们哦。

🥴内容分享:本期会对C语言中的汉诺塔进行分析,讲解什么是汉诺塔,怎样实现冒泡排序。

😘:不要998,只要一件三连,三连买不了吃亏,买不了上当(写作不易,求求了💓)

目录

🍉前言

🍊什么叫汉诺塔

🍑汉诺塔移动过程分析

🍓汉诺塔移动次数分析

🥝具体代码分析

🍇总结


🍉前言

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

🍊什么叫汉诺塔

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

🍑汉诺塔移动过程分析

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

 

🍓汉诺塔移动次数分析

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

阶层次数规律
112^1-1
232^2-1
372^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;

🥝具体代码分析

用函数递归求移动的次数 

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


🍇总结

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


http://www.kler.cn/news/16969.html

相关文章:

  • 网络钓鱼仍然是安全行业的祸害
  • IntelliJ IDEA 2023.1正式发布,Maven项目大提速支持Apache Dubbo
  • 大四毕业生想要找实习程序员工作 ,我总结了三点分享给大家
  • String AOP
  • 【代码随想录】刷题Day14
  • Linux之【多线程】生产者与消费者模型BlockQueue(阻塞队列)
  • Linux安装flutter
  • 基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)
  • 2022年度项目管理软件排名揭晓:哪些软件在市场中脱颖而出?
  • 模型实战(10)之win10下tensorRT部署yolov5算法
  • matlab all函数详解
  • 嵌入式 Qt 移植教程
  • 从零开始实现 std::string:让你更深入地了解字符串的本质
  • OpenCV学习小记
  • 递归思路讲解
  • C/C++开发神器CLion全新发布v2023.1——新软件包管理解决方案
  • python语法入门到面向过程编程(七)
  • QML动画分组(Grouped Animations)
  • 6. 计算机网络
  • synchronized用法加锁原理
  • 深入浅出C++ ——异常
  • Ubuntu 安装和配置 Samba服务开启共享文件夹
  • 【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务
  • 关于项目移植过程中,如何在不修改java源程序的情况下,如何适应新环境下的mysql
  • web小游戏开发:华容道(完)
  • 功能齐全的 ESP32 智能手表,具有多个表盘、心率传感器硬件设计
  • Bizcharts 3.0 到 4.0 升级部分问题记录
  • 现代CMake高级教程 - 第 5 章:链接第三方库
  • spring1:核心和设计思想
  • Vue3中双向数据绑定与Pinia实践+JS数据引用的循环修改问题