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

看不懂以下代码是如何运作的,求直观、明了、清晰的解释。

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')


正在回答

2 回答

先理解两种情况,一是只有一个积木,二是有两个积木。

一个积木时,print a,'-->',c 这个比较好理解,直接把a上的积木移到c上。

这时,前四行的代码可以理解了,剩下三行的代码,可以理解为两块积木的情况。

两块积木时,先把a移到b,再把a移到c,最后把b移到c。一定要先理解规则。

此时,根据n==1时的定义,move(n, a, b, c)中,a移到c,也就是第二个元素移动到第四个元素。

所以a移动到b,表达为move(n - 1 , a , c , b),

然后,a移动到c,表达为move(1 , a , b, c),也就是print a , '-->' , c,

最后,b移动到c,表达为move(n - 1 , b , a , c)

大于两块积木的,把除了最底下的积木,认为是完整的第二块积木就可以了,这就是递归函数。

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

慕移动4045710

看到这回答懂了,很到位 def shunjianyidong(n,a,b,c): if n==1: print a,'-->',c return shunjianyidong(n-1,'ant','cat','boy') print a,'-->',c shunjianyidong(n-1,'boy','ant','cat') shunjianyidong(2, 'ant','boy','cat’) 然后我自己改写了一下
2020-04-10 回复 有任何疑惑可以回复我~
#2

慕移动4045710 回复 慕移动4045710

改写之后逻辑有点变了,具体便在哪里呢?
2020-04-10 回复 有任何疑惑可以回复我~

个人理解:

move(n, a, b, c)首先要理解这个函数的定义
例如有A,B,C 三个柱子,n表示A柱子上的木块

这个move函数就是把A柱子上的n个木块移动到C柱子上
把前面n-1个木块看成整体,那么
第一:A柱上面的n-1个木块移动到B柱
第二:A柱上面最后一个木块移动到C柱

第三:B柱上面的n-1个木块移动到C柱
换成函数表达就是

move(n-1,a,c,b)
print a,'-->',c

move(n-1,b,a,c)

递归就这样完成

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

小白萌新up

这个游戏规则我是明白了,你解释的我也看明白了,就是不懂,为啥分别是move,print ,move,能给解释一下嘛
2020-04-05 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

看不懂以下代码是如何运作的,求直观、明了、清晰的解释。

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