汉诺塔啊啊啊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

用栈求解汉诺塔问题,利用递归求解增强版汉诺塔问题

四柱加强版汉诺塔问题

猜你喜欢

转载自www.cnblogs.com/xrj1229/p/9216275.html