为了账号安全,请及时绑定邮箱和手机立即绑定

没有搞懂 有谁能解释下 用大白话


http://img1.sycdn.imooc.com//5e15638600018ad902260084.jpg

def move(n, a, b, c):
    if n ==1:
        print a, '-->', c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')

这是代码,哪位大佬能用大白话解释下图片中的三行代码,以及怎么就打印出了他们的移动步骤,属实没搞懂,汉诺塔怎么实现我知道了,但是编写代码没搞懂,尤其图片中的三行重要代码!
代码中为什么没有   move(n-1,c,b,a)  这行代码呢
程序逻辑是啥
解释不清的、混经验的就请别评论  别浪费我问答机会   让老师来回答  这已经是重新第3次发了  谢谢


正在回答

2 回答

画了个图,是为了说明问题的。

可以理解为:代码按顺序执行,每次调用函数,最后都有个print和之后的return,被调用的函数return后,调用的函数才继续往下走。所以下图的打印输出,每一层是从后往前打印的。

http://img1.sycdn.imooc.com//5e1700070001f76c12050764.jpg

6 回复 有任何疑惑可以回复我~
#1

玖__ 提问者

谢谢 太感谢 思路理清楚了
2020-01-10 回复 有任何疑惑可以回复我~
#2

zengjd2

最后一句'每一层是从后往前打印的'是什么意思,程序运行好打印结果和你解释的顺序不一样啊,能教一下嘛
2020-01-11 回复 有任何疑惑可以回复我~
#3

慕虎4088143

能画出这个图,是真的尽心了。但还有点小瑕疵:: 第三列第一个框内第二行错了,应该是print 'A','-->','C' , 然后建议在方框的图上标出print(打印)的前后顺序, 最后,建议下边四列的15行print(打印)的上下顺序也按前后顺序排一下,就完美了。
2020-01-31 回复 有任何疑惑可以回复我~
#4

风疏烟沐丶

这图是不是有点小错误,第三列第一个框中第二行应该是 print a->c
2020-02-12 回复 有任何疑惑可以回复我~
#5

鸽子7102878

大佬nb
2020-03-30 回复 有任何疑惑可以回复我~
#6

单挑谁怕谁

思路理清楚了,不过打印顺序还是有点懵逼,求教
2020-04-25 回复 有任何疑惑可以回复我~
查看3条回复


不知道你问的意思是什么,想了想,或许是你没理解参数传递规则才会有疑问。

请注意参数传递的规则:参数是按位置传递的

当运行第5行  move(n-1, a, c, b)且n-1值为1时,通过递归调用就会执行第2,3,4行代码(这个理解吧?)

这时,请你关注一下,第一行获得的参数实际是是什么:

move(n, a, b, c):    //第5行代码按位置把参数传递到这行,于是a获得的值仍旧是a,但b获得的其实是c(也就是“C”),c获得的值是b(也就是“B”)  

if ==1:       

print a, '-->', c       //所以这行打印出来的结果是 A——>B

 return

不知道能否帮到你。

4 回复 有任何疑惑可以回复我~
#1

玖__ 提问者

太感谢了 把我仅存的疑问解答了
2020-01-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758627    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

没有搞懂 有谁能解释下 用大白话

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信