汉诺塔递归算法

汉诺塔递归算法

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亿年,所以才预测婆罗门搬完所有盘子之时将是地球毁灭之时.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值