首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python2.7中递归函数的执行顺序

python2.7中递归函数的执行顺序
EN

Stack Overflow用户
提问于 2015-02-28 05:12:30
回答 1查看 211关注 0票数 1
代码语言:javascript
运行
复制
def fac(n):
    if n==1 or n==2  or n==3:
        print "i am calling fac(",n,")"
        return  n
    else:
        print "i am calling fac(",n,")"
        x=fac(n-1)+fac(n-2)+fac(n-3)
        return  x  

fac(6)的输出是:

代码语言:javascript
运行
复制
fac(6)
i am calling fac( 6 )
i am calling fac( 5 )
i am calling fac( 4 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 1 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 4 )
i am calling fac( 3 )
i am calling fac( 2 )
i am calling fac( 1 )
i am calling fac( 3 )
20

python2.7执行递归函数的规则是什么?

结果使我感到困惑,无法从计算树中进行分析。为什么结果不是其他形式呢?

python处理递归计算的规则是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-28 06:03:12

Python按照遇到调用指令的顺序运行每个调用。因此,从fac的顶部开始,从n=6开始,它将到达以下一行:

代码语言:javascript
运行
复制
x=fac(n-1)+fac(n-2)+fac(n-3)

它将做的第一件事是计算n-1=5,并运行fac(5) --它再次从函数的顶部开始。它将到达相同的位置,调用fac(4),调用fac(3) --只返回3。直到现在,它才会计算n-2=2并运行fac(2),然后运行fac(1)并执行加法。现在fac(4)已经完成了,我们回到了fac(5),我们继续从fac(n-2)出发。

如果修改函数以跟踪递归的深度,则可以将调用打印为树结构,以便更容易地查看所发生的事情:

代码语言:javascript
运行
复制
def fac(n, level=0):
    print '{}fac({})'.format(level*'\t', n)

    if n==1 or n==2  or n==3:
        return n
    else:
        x = fac(n-1, level+1) + fac(n-2, level+1) + fac(n-3, level+1)
    return x

给予:

代码语言:javascript
运行
复制
fac(6)
   fac(5)
      fac(4)
          fac(3)
          fac(2)
          fac(1)
      fac(3)
      fac(2)
   fac(4)
      fac(3)
      fac(2)
      fac(1)
   fac(3)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28778357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档