首页 > 其他分享 >关于汉诺塔的最简单理解

关于汉诺塔的最简单理解

时间:2023-02-24 16:57:41浏览次数:33  
标签:run 积木 我要 理解 汉诺塔 简单 移动 我们

最简单的汉诺塔算法解析,看不懂可以刀我

今天给大家带来一个汉诺塔算法的讲解,应该是最简单的理解方法,

首先我们得知道汉诺塔游戏规则,不会有人搜这个然后不知道规则吧?不会吧?不会吧?

好了 解析开始

如果n=1那我们直接输出从a移动到c就好了,所以我们直接写出if n==1的时候 积木从a移动到c

接下来,我们要有一个思想,就是想着,我这个函数,就是整体搬运用的,什么是整体搬运,就是我要把n层塔从a移动到c,那我们就调用run(a,b,c,n),我们要把n层塔从b运到c,那我们就调用run(b,a,c,n),现在脑海里默念10次这个规则

然后 我们的终极目标,是把n层的他/她从a移动到c,所以我们调用这个函数 run(a ,b ,c ,n)

 

第一步,当塔有n层的时候,我们目前有 a b c三个柱子 ,我要把a的塔移动到c,我们需要先把最底层上面的那一摞(n-1层)积木搬运到a挪到b,那么这个时候我们就调用run(a,c,b,n-1)目的就是把n-1层挪到b,让a最大的积木能移动

第二步,那我们是不是要把a剩下的移动到c,因为剩下了最大块的积木,所以我们直接输出 积木从a移动到c

第三步,c已经有一个最大的积木了,我们剩下的只需要把b上n-1层的积木,整体搬到c,还记得我们的规则吗把n-1整体从b移动到c,直接写下run (b,a,c,n-1)

然后算法就写好了

function run (a, b, c, n) {
if (n == 1) {
console.log(`从${a}移动到${c}`);
} else {
run(a,c,b,n-1)//我要先把a整体移动到b

console.log(`从${a}移动到${c}`);//然后把最底层移动到c

run(b,a,c,n-1)//把b整体移动到c
}
}
run('a', 'b', 'c', 3)

标签:run,积木,我要,理解,汉诺塔,简单,移动,我们
From: https://www.cnblogs.com/zhengjiajian/p/17152097.html

相关文章

  • Vue中的nextTick理解
    一、NextTick是什么官方定义:在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的DOM。我们可以理解成,Vue在更新DOM时是异步执行......
  • 简单使用wireshark
    wireshark抓包工具拓扑图:拓扑图解释:终端用户使用wireshark抓包工具监听无线网卡,监听时,终端访问互联网,可实时监听网络抓包操作步骤:一,打开wireshark抓包工具,监听网卡......
  • Go语言并发编程:对进程、线程、协程和并发、并行的理解
    Go语言并发编程:进程、线程、协程和并发、并行的理解一、进程和线程对操作系统进程和线程以及协程的了解,可以看看我前面的文章:对进程、线程和协程的理解以及它们的区别......
  • 深入理解Python装饰器
    Bydefinition,adecoratorisafunctionthattakesanotherfunctionandextendsthebehaviorofthelatterfunctionwithoutexplicitlymodifyingit.装饰器可......
  • dremio S3StoragePlugin 简单说明
    S3StoragePlugin核心是进行s3的数据处理,从能力上来说主要是一个文件系统的存储插件,以前我简单介绍过关于存储扩展的开发,一般需要包含一个存储插件配置类以及存储插件的......
  • 仅“2k”字就能理解的async/await原理,摸个鱼的时间搞定它
    前言上篇文章​​5K字由浅入深聊聊Promise实现原理​​,中讲述了Promise内部的实现原理。今天来聊聊​​async​​与​​await​​,那么async与await到底是什么呢。都说是​......
  • 污水cod测定仪让检测变得简单智能
    污水cod测定仪“Glos水质智能检测系统"让检测变得简单智能。产品内置水质分析、数据查询、数据打印、引导检测模式等应用程序。详细介绍产品介绍污水CO......
  • 深入理解跳表及其在Redis中的应用
    前言跳表可以达到和红黑树一样的时间复杂度O(logN),且实现简单,Redis中的有序集合对象的底层数据结构就使用了跳表。其作者威廉·普评价:跳跃链表是在很多应用中有可能替代......
  • 记Cucumber行为驱动测试的简单配置与使用方式
    产生背景代码测试的工具有很多,比如最常用的单元测试工具Junit、Jupiter、Mockito和PowerMockito,这几个可以说是Java开发者的心头好,代码测试一般都是用这几个里面的某一个......
  • 换个角度理解TCP建立连接为什么需要三次握手
    1、第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。2、换个易于理解的视角来看为什么要3次握手。客户端和服务端通信前要进行连接,“3次握手”的......