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

news2024/11/20 11:30:18

 

🤩本文作者:大家好,我是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.coloradmin.cn/o/491837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[230508]托福听力真题TPO66|词汇总结| 精听|19:30~20:10 20:50~23:00 8:30~9:40

TPO66 L1: 3/6 TPO66 L2: TPO66 L3: 目录 TPO66 C1 一、要点 二、文本 三、文本注释 四、复听笔记 TPO66 C2 一、要点 二、文本 三、文本注释 四、复听笔记 TPO66 L1 重点词汇 TPO66 L2 重点词汇 TPO66 L3 重点词汇 TPO66 C1 一、要点 …

大家都去荷兰注册公司到底是为了什么?

荷兰位于欧洲大陆西北部,北濒北海,与德国和比利时接壤。国土总面积为41528平方公里, 2020年2月人口达1741万人。荷兰是中国企业海外投资的重要目的地国之一。目前,中国是荷兰至二大外资项目来源国。据荷方统计,目前&am…

用 ChatGPT 尝试 JavaScript 交互式学习体验,有用但不完美

很好,但还不能取代专家导师,有时还会犯错! ChatGPT 教小狗编程( Midjourney 创作) GPT-4刚刚发布,相较于GPT-3.5,它有显著的增强功能。其中之一是它在更长时间的交互和更大的提示下,…

Java程序设计入门教程--数组

目录 一、一维数组创建 1. 定义数组 (1)声明 (2)分配数组内存空间 2. 数组初始化 (1)静态初始化 (2)动态初始化 3. 一维数组的拷贝 (1)数组元素的拷…

家用洗地机哪种好?怎么选购家用洗地机

在这个高度关注环境、健康和安全的时代,洗地机已成为多种设施不可或缺的清洁工具。它不仅可以提高清洁速度和质量,还可以协助您提高生产效率和管理流程。洗地机的优点在于它易于使用,具有多种高效能力和灵活性,是一个为现代清洁服…

(C语言版)力扣(LeetCode)+牛客网(nowcoder)链表相关面试题OJ题解析

链表面试题 203. 移除链表元素题目解法一:递归解法二:迭代 206. 反转链表题目解法一:递归解法二:迭代 876. 链表的中间结点题目解法一:快慢指针法解法二:单指针法 链表中倒数第k个结点题目解法 21. 合并两个…

22.碳交易机制下考虑需求响应的综合能源系统优化运行

说明书 MATLAB代码:碳交易机制下考虑需求响应的综合能源系统优化运行 注意:另外还有含义柔性负荷、蓄冷式空调、共享储能以及碳捕集的综合能源系统优化运行代码,欢迎咨询 关键词:需求响应 碳交易机制 日前优化调度 综合能源系统…

pdf怎么分割成一页一页的文件?

pdf怎么分割成一页一页的文件?相信很多使用电脑办公的小伙伴们都知道,无论是pdf文件还是ppt文件其都是由很多页组成的。一般当我们需要其中的部分内容时候,可以通过手动的方式将ppt文件来拆分成一页一页的来使用。但是这种手动的方法对于pdf文…

数据库中数据的操作(进阶)

数据库中数据的约束 键值约束 primary key唯一性约束 unique key非空约束 not null默认值 default val扩展属性(auto_increment)外键约束 foreign keycheck 子句约束 键值约束 primary key 主键约束:primary key 约束指定字段中的值&#xff…

虹科干货 | 零售业数智升级不掉队,get数据,get未来!

电商崛起,传统零售行业危机四伏,全渠道盈利与可持续化成为难点,库存管理这块难啃的“硬骨头”也同样让零售商倍感压力… 背腹受敌的零售商,如何才能在数字化转型道路上避免利润缩水,与供应商协作共赢,摆脱困…

【Mac教学】如何打开macOS 的最大权限

相信有不少用户都知道,目前苹果的Mac 电脑中,有不少功能为了安全问题,设立了多项安全措施,当中有一些需要安装第三方的软件,但因为缺少了苹果认证,而无法使用或安装,因此为各位讲解一个设定&…

汇编语言-复习自用

本文用于自我复习汇编语言,参考b站一位老师的讲解整理而成,感谢老师的无私付出视频链接链接 文章目录 1.第一章1.1计算机组成1.2读取1.3 寄存器及数据存储1.4 mov和and指令1.5 确定物理地址1.6 内存分段表示法1.7debug使用1.8CS:IP1.9jmp指令改变csip1.1…

Git教程(一)

1、Git概述 1.1 、Git历史 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)…

ThingsBoard使用jar包进行初始化数据库

1、概述 ThingsBoard的官方虽然提供了直接使用他们的官方镜像来部署,但是根据我了解到的一些信息,目前国内几乎都是基于ThingsBoard进行二开,都需要拉取ThingsBoard的源代码,然后自己进行修改,然后部署自己修改后的代码,在这里我就不说如何进行本地编译了,目前网上有很…

SpringBoot的依赖管理和自动配置

目录 依赖管理自动配置 依赖管理 1.父项目做依赖管理 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> </parent>他的父项目 &…

如何远程访问本地jupyter notebook服务器,实现无公网IP端口映射

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 转载自远控源码文章&#xff1a;公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook&am…

【数据结构】插入排序

插入排序 1. 排序2.插入排序2.1直接插入排序2.2折半插入法2.3希尔排序 1. 排序 排序的概念 排序就是将一组杂乱无章的数据按一定规律&#xff08;顺序或者逆序&#xff09;排列起来。 排序的目的 方便查找元素。 内部排序和外部排序 若待排序记录都在内存中&#xff0c;称为内…

ASEMI代理ADI亚德诺LTC6992IS6-1#TRMPBF车规级芯片

编辑-Z LTC6992IS6-1#TRMPBF参数描述&#xff1a; 型号&#xff1a;LTC6992IS6-1#TRMPBF 输出频率&#xff1a;3.81Hz 工作电源电压范围&#xff1a;2.25 - 5.5V 通电复位电压&#xff1a;1.95V 电源电流&#xff1a;105-365A SET引脚处的电压&#xff1a;1V 频率设置电…

性能测试工程师岗分级(初中高/资深/专家)?提高性能测试的价值...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试岗位按照…

嵌入式Linux驱动开发(十二)platform设备驱动实验

1. platform设备驱动简介 基于驱动可重用性考虑&#xff0c;提出驱动分离与分层思想。平台设备驱动就是基于此。 1.1 驱动分隔与分层 1&#xff09;驱动分隔&#xff1a;   以I2C驱动为例&#xff0c;假设有三类SOC&#xff0c;各自对一个设备写I2C驱动&#xff0c;就需要3…