规定:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
思路:利用递归解决,把复杂逻辑问题抽象化。
1、把a上面n-1个盘子移动到b上。
2、把a上最后一个移动到c;
3、把b上n-1个移动到a上,再把b上最后一个移动到c;
如此循环2,3,步骤,直到把最后一个盘子移动到c上
def move(x,y):
print x,'-->',y
def HanTower(n,a,b,c):#把n个圆盘从a移到c,用b作辅助
if n==1:#跳出条件:如果a只有一个圆盘,直接到c
move(a,c)
return
else:
HanTower(n-1,a,c,b)#把a上面n-1个圆盘移到b,只关注表面动作,不用管内部逻辑以及它是怎么实现的
move(a,c)
HanTower(n-1,b,a,c)#把b上面n-1个圆盘移到c
#调用语句略
在写HanTower这个递归函数时,我们只写出了第一次循环的两种情况,然而在执行函数时,三个柱子的角色实际上在反复的切换。使用递归抽象问题带来的好处就很明显了。
可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题。