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

为什么第一行是 A --> B?

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

正在回答

3 回答

def move(n, a, b, c):
    if n ==1:                    //当n 等于1时才执行,所以这个判断语句执行否,也就是后面的句子
        print a, '-->', c
        return
    move(n-1, a, c, b)    //这里就是if后的句子,再执行move函数,但是n-1,也就是再判断一次n是否等于1,不行就一直重复执行,知道n=1,而这里的b和c的位置互换了,当执行if 里的输出时,实际输出的是c那个位置的b
    print a, '-->', c
    move(n-1, b, a, c)
move(4, 'A', 'B', 'C')

0 回复 有任何疑惑可以回复我~

其实很好理解,当n不等于1的时候,move(n-1, a, c, b),这个语句会无限执行。

以n=2为例,当执行语句move(1, a, c, b),会出现程序的一个输出语句即print a, '-->', c。

print 里的a,c代表的是move(1, 'A', 'C', 'B')里的a和c,这里的a,c代表的是堆栈的物理位置

对应输出就是A-->B.

由于n=1,故这部分语句

    if n ==1:
        print a, '-->', c
        return

输出结束。

执行完成之后继续执行下列语句

    print a, '-->', c

注意,这里是以n=2为输入,对应还是move(2, A, B, C),故输出a,c对应就是A-->C.

最后一个语句move(n-1, b, a, c),n=2,这时候对应move(1,'B', 'A', 'C'),再走if语句,

    if n ==1:
        print a, '-->', c
        return

输出a,c对应就是B-->C。

return结束。

不知道有没有错误的地方。有错望纠正。

n=2的完整输出:

A --> B
A --> C
B --> C




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

后面的还是看不懂!大神,完善一下


0 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

为什么第一行是 A --> B?

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