关于Python递归案例——汉诺塔的理解


刚开始学python,不是太能理解这道题的揭发,直接在网上查找的案例代码,后来退了半天终于搞清楚了,故存于此处以免以后遗忘

先上代码:

def move(n, a, b, c):
    if(n == 1):
        print(a,"->",c)
        return
    move(n-1, a, c, b)
    move(1, a, b, c)
    move(n-1, b, a, c)
move(3, "a", "b", "c")

廖雪峰老师的题目是以三个盘为例,所以这里我也以三个盘作为n的参数进行推演。


move(3, "a", "b", "c") //首先是n=3时,不满足要求,跳到move(n-1, a, c, b)——>move(2,a,c,b)
    move(2, "a","c","b")   //然后n=2也不满足要求,跳到move(n-1, a, c, b)——>move(1,a,b,c)
        move(1, "a", "b", "c")    //此时n的值为1,满足if条件,执行print语句输出
            print("a", "->", "c")  //执行完后开始执行move(2,a,c,b)函数的第二第三句move语句  move(1, a, b, c)——>move(1,a,c,b) 和move(n-1, b, a, c)——>move(1,c,a,b)
         move(1, "a", "c", "b")  //此时n也为1,故执行print语句进行输出          
print("a", "->", "b")
        move(1, "c", "a", "b")   //此时n仍然为1,继续执行print语句输出
            print("c", "->", "b")   //此时n=3循环中的move(n-1, a, c, b)循环才最终结束,开始执行move(1, a, b, c)——>move(1, a, b, c)
move(1, "a", "b", "c")  //n=1,执行print语句输出
    print("a", "->", "c")    //现在开始执行move(3, a, b, c)递归的最后一个函数move(n-1, b, a, c)——>move(2, b, a, c)
move(2, "b", "a", "c")  //n=2,故执行下三句函数,首先执行move(n-1, a, c, b)——>move(1, b, c, a)
    move(1, "b", "c", "a")   //n=1,执行print语句输出
        print("b", "->", "a")
    move(1, "b", "a", "c")  //这里执行下三句函数的第二句move(1, a, b, c)——>move(1, b, a, c),由于n=1,执行print语句输出
        print("b", "->", "c")
    move(1, "a", "b", "c")  //执行最后一个函数move(n-1, b, a, c)——>move(1, a, b, c)
        print("a", "->", "c")  //n=1,执行print语句输出,完成整个汉诺塔函数的输出


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值