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

函数的每一步到底是怎么执行的?

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

当执行到1的时候,是再次调用这个函数,还是print a, '-->', c?

接下来又执行哪一步?

正在回答

2 回答

递归函数形式如下:

① move(n,a,b,c)

if→print→return【返回打印,结束递归】

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

print【流程打印】

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


这时,我们假设n=3,执行步骤如下:

① move(3,A,B,C) 【a=A, b=B, c=C】

② move(2,A,C,B) 【a=A, c=C, b=B】

       ②① move(2,A,C,B) 【等同于②,a=A, b=C, c=B】

       ②② move(1,A,B,C) 【a=A, c=B, b=C】

                 ②②① move(1,A,B,C) 【等同于②②,a=A, b=B, c=C】

                 执行if→print→return 【返回打印,第一行,结束②②递归】

       print 【流程打印,第二行,与②①、②②、②③为同一级】

       ②③ move(1,C,A,B) 【b=C, a=A, c=B】

                 ②③① move(1,C,A,B) 【等同于②③,a=C, b=A, c=B】

                 执行if→print→return 【返回打印,第三行,结束②③递归】

print 【流程打印,第四行,与①、②、③为同一级】

③ move(2,B,A,C) 【b=B, a=A, c=C】

       ③① move(2,B,A,C) 【等同于③,a=B, b=A, c=C】

       ③② move(1,B,C,A) 【a=B, c=C, b=A】

                 ③②① move(1,B,C,A) 【等同于③②,a=B, b=C, c=A】

                 执行if→print→return 【返回打印,第五行,结束③②递归】

       print 【流程打印,第六行,与③①、③②、③③为同一级】

       ③③ move(1,A,B,C) 【b=A, a=B, c=C】

                 ③③① move(1,A,B,C) 【等同于③③,a=A, b=B, c=C】

                 执行if→print→return 【返回打印,第七行,结束③③递归,整个函数递归结束!】

具体移动步骤如下:

A --> C

A --> B

C --> B

A --> C

B --> A

B --> C

A --> C


数学公式表示如下:

若圆盘n=3,打印行数为2^0+2^1+2^2=7行;

同理,n=4,打印行数为2^0+2^1+2^2+2^3=15行;

同理,n=5,打印行数为2^0+2^1+2^2+2^3+2^4=31行,以此类推。

(如果有哪里说得不对的地方,可以一起讨论一下)

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

qq_乱码人生_0

老哥讲的很好
2018-02-12 回复 有任何疑惑可以回复我~
#2

慕桂英0933980

好厉害
2018-05-02 回复 有任何疑惑可以回复我~
#3

温纯

看不懂,真的是好难理解啊,这一章不学行不行,脑壳疼
2018-06-07 回复 有任何疑惑可以回复我~

当n==1时,执行print a, '-->', c然后执行return,此子函数结束;一层层执行,直到递归结束


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

举报

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

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

进入课程

函数的每一步到底是怎么执行的?

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