传统汉诺塔问题:
汉诺塔由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