汉诺塔啊啊啊O(≧口≦)O
传统汉诺塔问题:
汉诺塔由n个大小不同的圆盘和三根木珠a、b、c组成。开始时,这n个圆盘由大到小依次套在a柱上,要求把a柱上n个圆盘按如下规则移到c柱上:
(1)一次只能移一个圆盘;
(2)圆盘只能在三根柱上存放;
(3)在移动过程中,不允许大盘压小盘;
问将这n个盘子从a柱移到c柱上,总共需要移动的次数?
这个问题可以用递推来解决啦~\(≧▽≦)/~啦啦啦,想象一下,将n-1个盘子看成一个整体,设移动一个盘子的最少步数为f(1),移动两个盘子的最少步数则为f(2),移动三个盘子的最少步数则为f(3),以此类推,移动n个盘子的最少步数则为f(n)。
那么如何用计算机实现f(n)的计算呢?
可以先想一下,如果是要移动三个盘子时的解决方法,如果要移动三个盘子到c柱,需要将a柱最下面的盘子放到c柱最下面,那么如何实现这个操作呢?需要将a柱最下面盘子的上面两个盘子先取下,将其放在b柱上,(那我标记一下吧,称最上面的盘子为一号盘,一号盘下面的为二号盘,二号盘下面的为三号盘,以此列推.....)
如何实现一号盘和二号盘的取下呢,当然要先取下一号盘啦!(首先明确一点,把两个盘子放在b柱和放在c柱上的步数是没有差别的!)
f(2)=f(1)+1+f(1)而f(1)又是已知的,所以f(2)也可以推出来,后面的就以此列推,f(n)=f(n-1)+1+f(n-1)=2*f(n-1)+1;←这是递推式
那通项公式呢?↓
f(n)+1=2*f(n-1)+2
f(n)+1=2*[f(n-1)+1]
设f(n)+1=g(n)
则f(n-1)+1=g(n-1)
所以g(n)=2*g(n-1)
g(1)=2
所以g(n)=2n
f(n)+1=2n
f(n)=2n-1
呀呀呀啦啦啦~\(≧▽≦)/~啦啦啦哈哈哈O(∩_∩)O哈哈哈~嘿嘿嘿
再附上几个blog链接好啦,讲的是加强版汉诺塔Y(^o^)Y
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!