Python汉诺塔递归算法

汉诺塔含义:

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

Hanoi玩具

算法思路:
1.当只有一个圆盘时,只需要从A柱子挪到C柱子即可,1次解决。
2.当有n个圆盘时,且小圆盘只能放在大圆盘上,全部挪到C柱子上,一定是把C柱子先作为中转,n-1个圆盘全部挪到B柱子中,然后把A柱子中的最大圆盘挪到被清空的C柱子上,然后经历和B柱子同样的步数,把n-1个圆盘全部挪到C柱子上,按照大的在下小的在上的规则(此时把A柱子作为中转)

代码片段:

def move(n,a,b,c):
    if n == 1:
        print a,'-->',c
    else:
        move(n-1,a,c,b) #将n-1个圆盘最终挪到B柱子上
        move(1,a,b,c) #将A柱子上最大的圆盘挪到已被清空的C柱子上
        move(n-1,b,a,c) #将n-1个圆盘从B柱子上挪回C柱子上

move(3,'A','B','C')

运行结果:

运行结果.png

三个圆盘恰好需要7次挪移。

扩展思考:

n个圆盘需要挪移的次数是(n-1)个圆盘挪移次数乘以2再加上1,即表示为:f(n)=f(n-1)*2+1,这是一个递推公式,可最终推导出通通项公式:f(n)=2^n-1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前置文章:递归算法:www.jianshu.com/p/703069f3ba3f . 汉诺塔问题是来源于印度传...
    郎小凯阅读 788评论 0 1
  • 原文链接(转载请注明出处)汉诺塔的图解递归算法 起源 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大...
    Dmego阅读 1,569评论 0 0
  • 不会哭了 作为代价 不会笑了, 也许我的存在, 只能在天堂隔壁, 静静地远观着, 曾是我唯一的梦。 当黎明不在光明...
    Mingmicro阅读 270评论 0 0
  • 龟兔赛跑的故事大家都不陌生,我们从小听到大,随着不同的观念故事也有不同的更新。 第一个故事是:兔子和乌龟...
    红参勿忘阅读 1,048评论 2 1
  • 没有人会猜到我竟然会追人,也没 有人会猜到我我竟然会追一个政法学院的。 故事只有开始没有过程没有结尾。故事只...
    TheCorner阅读 478评论 0 2