【递归】小学生都看得懂的汉罗塔问题

article/2025/6/16 8:14:37

文章目录

  • 前言
    • 最简模型
    • 规律分析
    • 分析总结
    • 结论解读
  • 篇尾


前言

大梵天创造世界的时候做了三个金刚石柱子,在一根柱子上从上到下按照大小顺序摞着64骗黄金盘子,大梵天命令婆罗门把圆盘开始按大小顺序重新摆放在另外一个柱子上。在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。64个圆盘移动完毕之日,就是世界毁灭之时。
在这里插入图片描述

最简模型

接下来开始分析64个圆盘移动到另外一个柱子上一共需要多长时间,其实这个问题非常的简单,在移动64个盘子之前我们先来尝试一下移动两个盘子
在这里插入图片描述

第一步 A to C #代表把A柱子上的移动到B主子上,下边将不再解释
第二步 A to B
第三步 B to C

规律分析

只需要三步就可以把A柱子上的盘子按大小顺序移到C柱子上,只要看懂了这三步那么恭喜你,你已经成功掌握了汉罗塔的秘密。不相信?请继续往下看

现在如果将两个圆盘换成三个步骤该是如何呢?接下来请继续看我分析
在这里插入图片描述

第一步 我们只会移动两个圆盘的问题,所以我们第一步永远是将两个圆盘移动到B柱子上

A to C
A to B
B to C

第二步 两个圆盘移动后第二步永远就是加入第三个圆盘,将它移动到第三个柱子上去

A to C

第三步 第二步完成后发现问题又变成了两个圆盘的问题,不过这里只是换了一下位置而已

B to A
B to C
A to C

所用步数 2*3+1

分析总结

移动结束,这里看到不管几个圆盘解决的方法永远只有三步。为了更多的人可以理解,这里我们分两种方式表达(理解一种即可)
从宏观到微观(从大到小)

第一步,除了下边最大的盘子外的所有盘子看成一个盘子,第一步就是将这一个盘子移动到中间柱子上
第二步,将最大的盘子移动到第三个柱子上
第三步,将中间柱子上的盘子移动到第三个柱子上

从微观到宏观(从小到大)

第一步 不管有多少盘子我们第一步永远是解决最上边两个小盘子移动到中间柱子上
第二步 加入下一个盘子,并移动到空柱子上
第三步 将中间柱子上所有盘子看成一个盘子移动到最右边的盘子(相当于重复步骤一,不过只是位置不同罢了)并将右边盘子所有盘子看成一个盘子

结论解读

解读
能把两个盘子看成一个盘子说明两个盘子移动已经掌握,第三步完成后就已经能解决三个盘子问题



此时三个盘子问题的所有步骤变成【四个盘子的第一步】
【四个盘子第二步】就是将第四个盘子移动到空柱子上
【四个盘子第三步】就是位置换位的【四个盘子的第一步】,完成后说明已经可以解决四个盘子问题



此时四个盘子的所有问题变成【五个盘子问题的第一步】
【五个盘子第二步】就是将第五个盘子移动到空柱子上
【五个盘子第三步】就是位置换位的【五个盘子的第一步】,完成后说明已经可以解决五个盘子问题



、、、、、、
、、、、、、
、、、、、、,完成后说明你已经可以解决n个盘子的问题

最终步骤数 h(x)= 2 h(n-1) + 1 === 2n次方-1


现在回到最开始的问题,婆罗门在移动64个盘子需要用时多少呢?
假设移动一个盘子需要一秒那么最终需要的时间是5800亿年

篇尾

算法的目的是为了让程序提交效率,那么你能否用程序来完成这个函数呢?有兴趣的可以在下方评论交流


http://chatgpt.dhexx.cn/article/qSpa3lZj.shtml

相关文章

汉罗塔问题(递归)

数据结构–汉罗塔 题目描述 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: 1.一…

多柱汉罗塔(python解法,带注释,注释为个人理解)

一、参考链接: 1、普通汉罗塔链接(这边也是我的博文): (166条消息) 递归经典算法案例题(汉罗塔、阶乘、斐波那契代码)_南风~古草的博客-CSDN博客_汉罗塔 2、大佬的多柱汉罗塔博文(有数学推…

累加—递归汉罗塔问题 (C语言)

一、累加—递归 一、代码 二、测试结果 二、汉罗塔问题 一、分析 二、代码 三、测试结果 三、总结 一、累加—递归 一、代码 //累加的递归实现 #include <stdio.h>int addTo(int n) {if(n < 0)return 0;else{return addTo(n-1)n;} } void addToTest() {int n…

【C语言】汉罗塔

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f300;大家可以叫我**小何或者小侠&#x1f300;** &#x1f534;我是一名普通的博客写作者&#x1f534; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助…

[C语言]C语言解决汉罗塔问题(初学者版)

目录 1、汉罗塔问题解决思路&#xff1a; 2、代码实现&#xff1a; 函数部分&#xff1a; 全部代码&#xff1a; 运行结果&#xff1a; 3、结语&#xff1a; 1、汉罗塔问题解决思路&#xff1a; 以三个为例&#xff0c;步骤为&#xff1a; 1.首先我们需要将其分成两个整体…

汉诺塔问题的详细讲解(python版)

2022.3.17 2022.11.15 增加次数计算一&#xff0e;抽象为数学问题&#xff1a; 从左到右有A、B、C三根柱子&#xff0c;其中A柱子上面有从小叠到大的n个圆盘&#xff0c;现要求将A柱子上的圆盘移到C柱子上去&#xff0c;期间只有一个原则&#xff1a;一次只能移到一个盘子且大…

Golang 汉罗塔问题

先用一般方法实现汉罗塔方法: 先确定三个"石柱" A B C 。n代表A柱起始圆盘数量 主函数: 结合栈来实现汉罗塔。 因为栈先进后出的特点 很适合汉罗塔。其实和上述方法本质一样,只不过添加了 栈的特性 这里定的栈最大容量为7,可以根据实际情况更改 栈的构造&#xff…

汉罗塔(递归分治)

Java代码如下 public class Hanoi {//操作步骤数private static int steps 1;public static void main(String[] args) {//盘子数目int diskNumber 4;doTowers(diskNumber, A, B, C);}private static void doTowers(int diskNum, char from , char via, char to){if (diskNum…

汉诺塔(Hanoi)问题,Java实现,C语言实现,Python实现!!!

目录 一、汉诺塔的玩法 二、汉诺塔的逻辑 三、代码实现 四、运行结果 五、总结 一、汉诺塔的玩法 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#x…

Java基础语法(汉罗塔)

Java基础语法&#xff08;汉罗塔&#xff09; 1 起源2 需求3 分析3.1 1个碟子3.2 2个碟子3.3 3个碟子3.4 4个碟子3.5 规律 4 代码实现&#xff1a;直接算法5 代码实现封装&#xff1a;栈的思想 1 起源 汉罗塔&#xff08;又称河内塔&#xff09;问题是源于印度一个古老传说的益…

《经典递归问题:汉罗塔》

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《JavaSE》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 ✨汉罗塔的介绍 图解游戏​ ✨N层汉罗塔需移动的次数 ✨汉罗塔的…

数据链路层 功能概述

数据链路层的研究思想 数据链路层基本概念 数据链路层功能概述 数据链路层功能概述

数据链路层功能概述、封装成帧与透明传输

你一定要做自己&#xff0c;做自己喜欢的事&#xff0c;然后把自己交给命运 文章目录 本章启航思维导图数据链路层数据链路层基本概念数据链路层功能概述封装成帧透明传输组帧的四种方法字符计数法字符填充法零比特填充法违规编码法 本章启航思维导图 数据链路层 数据链路层基…

【计算机网络】数据链路层——数据链路层功能/组帧/差错控制

文章目录 数据链路层数据链路层的功能为网络层提供服务链路管理帧定界、帧同步与透明传输流量控制 组帧字符计数法字符填充的首尾定界符法零比特填充的首尾标志法违规编码法 差错控制检错编码奇偶校验码循环冗余码 纠错编码 数据链路层 数据链路层的功能 数据链路层在物理层提…

19数据链路层的功能

1、数据链路层的功能 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路&#xff0c;使之对网络层表现为一条无差错的链路。 2、为网络层…

计算机网络——数据链路层功能概述、封装成帧、差错控制、流量控制与可靠传输机制

文章目录 前言一、数据链路层功能概述二、封装成帧1、透明传输2、封装成帧3、组帧的方法⑴字符计数法⑵字符/节填充法⑶零比特填充法⑷违规编码法 三、差错控制1、差错由来2、检错编码⑴奇偶校验码⑵循环冗余码 3、纠错编码——海明码 四、流量控制与可靠传输机制1、停止等待协…

计算机网络【数据链路层的功能】

计算机网络【数据链路层的功能】 数据链路层基本概念数据链路层功能概述封装成帧透明传输字符计数法字符填充法零比特填充法 差错控制差错从何而来&#xff1f;CRC 循环冗余码 数据链路层基本概念 数据链路层使用的信道主要有一下两种类型&#xff1a; 点对点信道&#xff1a…

数据链路层主要功能

透明传输 个人理解&#xff0c;透明传输其实就是指无论是什么报文都可以传输&#xff0c;非透明传输就是指某些特殊字符不能传输&#xff0c;在计算机网络中&#xff0c;透明传输在数据链路层提到过&#xff0c;在数据链路层将网络层协议封装成帧时&#xff0c;会在首部和尾部分…

数据链路层(内容超多哦)

数据链路层——交换机 1. 数据链路概述2. 以太网2.1 以太网帧格式2.2 交换机设备简介2.3 交换机的工作原理2.4 交换机以太网的工作模式2.5 配置前的准备 3. 命令行的使用 1. 数据链路概述 数据链路层的功能&#xff1a;1.数据链路的建立、维护与拆除 2.帧包装、帧传输、帧同步…

计算机网络:数据链路层功能

文章目录 1.为网络层提供服务2.链路管理3.帧定界、帧同步与透明传输4.流量控制5.差错控制 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据…