Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python2.7中递归函数的执行顺序_Python_Python 2.7_Recursion - Fatal编程技术网

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

python2.7中递归函数的执行顺序,python,python-2.7,recursion,Python,Python 2.7,Recursion,fac(6)的输出为: python2.7执行递归函数的规则是什么? 结果把我弄糊涂了,不能从计算树上分析。 为什么结果不是其他形式 python处理递归计算的规则是什么?python按照遇到调用它的指令的顺序运行每个调用。因此,从fac顶部开始,使用n=6,它将到达这一行: 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

fac(6)的输出为:

python2.7执行递归函数的规则是什么?
结果把我弄糊涂了,不能从计算树上分析。 为什么结果不是其他形式


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

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

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
它要做的第一件事是计算
n-1=5
,然后运行
fac(5)
——它将在函数顶部再次启动。它将到达相同的位置并调用
fac(4)
,这将调用
fac(3)
——它只返回3。只有现在它才会计算
n-2=2
并运行
fac(2)
,然后
fac(1)
并进行加法。现在
fac(4)
已经完成,我们回到
fac(5)
并且继续从
fac(n-2)
开始

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

x=fac(n-1)+fac(n-2)+fac(n-3)
给出:

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

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

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
它要做的第一件事是计算
n-1=5
,然后运行
fac(5)
——它将在函数顶部再次启动。它将到达相同的位置并调用
fac(4)
,这将调用
fac(3)
——它只返回3。只有现在它才会计算
n-2=2
并运行
fac(2)
,然后
fac(1)
并进行加法。现在
fac(4)
已经完成,我们回到
fac(5)
并且继续从
fac(n-2)
开始

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

x=fac(n-1)+fac(n-2)+fac(n-3)
给出:

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