Python函数执行-请求澄清

Python函数执行-请求澄清,python,python-2.7,Python,Python 2.7,我通过查看一些网站并以我的知识编写了以下代码,对于输出,我很少有疑问: factorial(3)将参数作为n=3传递给函数,其中n值不等于零,它应到达程序的else部分并执行我的代码。在其他部分 在这里我感到困惑,为什么它要打印1作为第一个输出,然后再打印其他值 def factorial(n): if n == 0: return 1 else: recurse = factorial(n-1) result = n * recu

我通过查看一些网站并以我的知识编写了以下代码,对于输出,我很少有疑问:

factorial(3)
将参数作为
n=3
传递给函数,其中
n
值不等于零,它应到达程序的
else
部分并执行我的代码。在其他部分

在这里我感到困惑,为什么它要打印
1
作为第一个输出,然后再打印其他值

def factorial(n):
    if n == 0:
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse
    print result
    return result
输出:

>>> factorial(3)
1
2
6
6

else
分支首先调用递归函数;这些递归调用也使用
print

factorial(3)
    n = 3 -> else
    recurse = factorial(n - 1)
        n = 2 -> else
        recurse = factorial(n - 1)
            n = 1 -> else
            recurse = factorial(n - 1)
                n = 0 -> if
                return 1
            result = n * recurse -> 1 * 1
            print 1
            return 1
        result = n * recurse -> 2 * 1
        print 2
        return 2
    result = n * recurse -> 3 * 2
    print 6
    return 6

注意
打印
调用的顺序;点击
n==0
后,递归函数开始返回,出现
print
语句,然后是另一个
return
和另一个
print
,等等。

Martijn:请您详细说明您的评论。。我对python和编程也是新手…阶乘(3)->n=3->else recurse=factorial(n-1)->n=2->else recurse=factorial(n-1)->n=1->else recurse=factorial(n-1)->n=0->if return 1 result=n*recurse->1*1 print 1 return 1 result=n*recurse->2*1 print 2 return 2 result=n*recurse->3*2 print 6 return 6为什么结果值更改为2 in(result=n*recurse->2*1)?@SivaKrishna:因为在该函数中,
n
的值仍然是2。函数调用之间不共享局部变量。您的函数确实令人困惑,您可能希望在第3行使用
result=1
而不是
return 1