递归实例:汉诺塔问题
- 汉诺塔由来
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7c89ad4718bf71b5140bc2013a8af14f.png)
- 只有两个圆盘时
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a7da08fea7a7eb587465d0328bb3b567.png)
n=2时:
1. 把小盘从A移动到B
2. 将大盘从A移动到C
3. 将小盘从B移动到C
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d8715a2828750e90d949946fd050f25a.png)
n个盘子时:
(这个过程中,我们把圆盘共分为两部分,把上面的n-1个圆盘看作是一个整体,最下面一个看作另外一部分)
- 把上面的n-1个圆盘从A经过C移动到B
- 把最下的圆盘移动到C
- 把上面的n-1个圆盘从B经过A移动到C
代码实现
def hanoi(n,a,b,c):
if n>0:
hanoi(n-1,a,c,b)
print("moving from %s to %s" % (a,c))
hanoi(n-1,b,a,c)