通过这个又加深了对递归函数的理解
题目为:
- 编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法
思路:
1. 先不想如何实现move函数,假设move函数已经定义好了,而且可以完成以上功能。
2. 将n个盘子想象成两部分,最上面的n-1个盘子为一体,最下面的大个1为一体
3. 在这种情况下,将n-1部分移到,目标位置就很
容易实现:
- 先将上面n-1部分放入,中间位置缓存区
- 将下面1部分放入 终点位置
- 将缓存区位置的n-1放入c上
完成!
那具体怎么实现?
我们先利用假设已经完成的move()方法来实现
- move(n-1,a,c,b) 上面n-1部分放入,中间位置缓存区
- move(1,a,b,c) 下面1部分放入 终点位置
- move(n-1,b,a,c) 将缓存区位置的n-1放入c上
这样就把n个盘子都放入了指定柱子
那我们的函数就可以这样定义:
def move(n,a,b,c): if n==1: print('%s-->%s'%(a,c)) return move(n-1,a,c,b)#使用假设的方法 move(1,a,b,c) move(n-1,b,a,c)
虽然还是有点纠结,但是通过这种方法也算是对递归有了新了解