汉诺塔递归算法
BY:Merlin
1.什么是递归算法
在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。
2.汉诺塔递归算法
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘按照大小顺序重新摆放在另一根柱子上,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。64根柱子移动完毕之日,就是世界毁灭之时。也就是说将第一个柱子上的圆盘借助第二个柱子移动到第三个柱子上,一次只能一定一个圆盘,且小的始终不能放在大的柱子上。究竟需要多少次才能将64片黄金圆盘转移?
3.算法流程
现在将三个柱子分别标记为A,B,C,n表示为圆盘的个数。最上面为一号盘,从小往大依次到n号盘。
1.当K=1时,只需要讲A移动到C即可;
A---->B
2.当K=2时,第一步将A的1号盘移动到B,再将A的2号盘移动到C,再将B移动到C即可;
A---->B A---->C B---->C
3.当K=3时,
1.将A的1号盘移动到C
2.将A的2号盘移动到B
3.将C移动到B
4.将A移动到C
5.将B 移动到A
6.将B移动到C
7.将A移动到C
A---->C A---->B C---->B A---->C B---->A B---->C A---->C
4.当K=n时,可以将上面n-1个盘子看成一个整体,第一步将上面n-1个盘子通过C依次移动到B,第二步再第n号盘子从A移动到C,再将n-1个盘子经过A移动到C。
4.python代码展示
def hanoi(n,a,b,c): #表示n个盘子从a经过b移动到c
if n>0:
hanoi(n-1,a,c,b)
print("从%s移动到%s" % (a,c))
hanoi(n-1,b,a,c)
hanoi(3,'A','B','C')
5.汉诺塔递归算法的数学表达
当K=1时,sum=1
当K=2时,sum=3
当K=3时,sum=7
.
.
.
当K=n时,sum=2^n - 1
因此当盘子数为64时,sum=18,446,744,073,709,551,615
假设婆罗门每秒搬一个盘子,则总共需要5800亿年,所以才预测婆罗门搬完所有盘子之时将是地球毁灭之时.