Python基础课--第十节 函数2--作业

作业

汉诺塔游戏,现在有ABC三根柱⼦。要求:将A柱所有的圆盘放到C柱。在移动的过程中可以借助B柱。并且规定⼤圆盘不能放⼩圆盘上⾯,每次只能移动⼀个盘⼦。⽤递归的⽅式来解决汉诺塔问题

分析:

  • 先标出 ABC三个盘子
    在这里插入图片描述
  1. 如果只有一个盘子 A – C
  2. 如果盘子大于等于2的情况下,我们总是可以看成2个盘子 一个是最下面的盘子和最上面的一个或者是所有的盘子
    2.1 先把最上面的盘子 A-- B
    2.2 把最下面的盘子 A–C
    2.3 把B柱上的盘子 B–C
def hannuotower(num,a,b,c):

    # 参数 num代表的是盘子 a b c分别代表的是A柱,B柱,C柱
    # 第一个条件 基线条件
    # 如果只有一个盘子 A -- C
    if num == 1:
        print('第1个盘子从',a,'->',c)

    else:

        # 第二个条件 递归条件
        # num >= 2的情况
        # 2.1 先把最上面的盘子 A-- B  借助C柱
        hannuotower(num-1,a,c,b)

        # 2.2 把最下面的盘子   A--C
        print('第',num,'个盘从',a,'->',c)

        # 2.3 把B柱上的盘子    B--C
        hannuotower(num-1,b,a,c)

hannuotower(3,'A','B','C')
结果
第1个盘子从 A -> C
第 2 个盘从 A -> B
第1个盘子从 C -> B
第 3 个盘从 A -> C
第1个盘子从 B -> A
第 2 个盘从 B -> C
第1个盘子从 A -> C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值