递归实现汉洛塔

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

在这里插入图片描述
当搬运的碟子数n=1时,直接搬运即可;(就是递归的基例)

当n大于1时:
要把n个碟子从针A搬运到针C,则必须通过针B(即需要一个独立于源针和目的针的中间针,用来辅助);
假设我们已经成功的把上面较小的n-1个碟子搬运到了针B,那么我们只需要再把第n个碟子(底层最大的那个)搬运到针C,再把针B的n-1个碟子搬运到针C,那么这n个碟子塔就成功的搬运到了针C了.而整个n-1的塔要怎么搬运呢?这就是递归啦

所以整个步骤:
1.搬运n-1个碟子到中间针(递归)
2.搬运第n个碟子到目的针
3.搬运中间针的n-1个碟子到目的针(递归)

python函数实现:
在这里插入图片描述

递归的优缺点

优点:
1.简单,递归都能用非递归的方式完成
2.代码简洁美观

缺点:
1.递归是函数抵用自身,存在较大的时间和空间消耗,每次调用,都要在内存中保存参数,返回地址以及临时变量
2.递归中很多计算都是重复的,由于本质是把一个大问题分成多个小问题,小问题之间可能会存在重复计算,浪费资源
3.调用栈可能会溢出,每一次函数会在内存栈中分配空间,调用层次太多时,可能会超栈溢出

发布了41 篇原创文章 · 获赞 8 · 访问量 1936

猜你喜欢

转载自blog.csdn.net/big_white_py/article/details/104072654