从汉诺塔理解抽象

规定:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

思路:利用递归解决,把复杂逻辑问题抽象化。

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这个递归函数时,我们只写出了第一次循环的两种情况,然而在执行函数时,三个柱子的角色实际上在反复的切换。使用递归抽象问题带来的好处就很明显了。

可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值