标签:多少 ack 解释 cto 栈帧 参数 参数类型 typeerror href
代码:
```
# 阶乘 -递归函数实现 : 例3的阶乘: 1 * 1 * 2 * 3
def factorial(x):
if not isinstance(x,(int)) or x < 0 : # 校验参数类型必须是正整数或者是0
raise TypeError("参数x类型必须是正整数")
elif x == 0:
return 1 # 0的阶乘是1
else:
return x * factorial(x-1)
# 分解 return x * factorial(x-1)
# x = 3 时, 结果是 3 * factorial(3-1)(即x=2)
# x = 2 时,结果是 2 * factorial(2-1) (即x=1)
# x = 1 时,结果是 1 * factorial(1-1) (即x=3)
# x = 0 时,结果是 1
# 最后结果 3 * 2 * 1 * 1
print(factorial(3))
尾递归优化
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。标签:多少 ack 解释 cto 栈帧 参数 参数类型 typeerror href
原文地址:https://www.cnblogs.com/thloveyl/p/11391735.html