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
。