展开的过程是这样的
return n*f(n-1)
因为f(n-1)return的是(n-1)f(n-2)所以你才能用(n-1)f(n-2)替换f(n-1)展开成
retrun n*(n-1)f(n-2)
依次类推
...
return n*...*2*f(1)
return n*...*2*1*f(0)
return n*...*2*1*1
所以里面的return在你展开的过程中就已经执行过了
1. #!/usr/bin/env python
2.
3. def factorial(n): #函数名
4. if n==0:
5. return 1 #如果0的阶乘返回1
6. else:
7. return n*f(n-1) #否则返回 n * f(n-1)
8.
9. print factorial(10) #打印结果
其他复杂点的版本
1def jc(n):
2 def mul(a,b): return a*b
3 return reduce(mul, range(1, n+1))
他的函数里面不是有个if条件判断的么,当n=0的时候就会返回1,而不是继续调用了。
怎么写着函数名都变了 - -