递归函数
标签(空格分隔): 重新理解一遍递归
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
首先,使用递归函数需要防止栈溢出。因为在计算机中函数的调用是通过栈这种数据结构实现的,每当进入一重函数调用,栈就会加一层栈帧,每当函数返回一层,栈就会减少一层栈帧,所以递归调用太多次数的话,会出现栈溢出的情况。
归调用栈溢出的方法:尾递归优化。即在函数返回时,调用自身,而return语句不能包含表达式,这样的话无论递归调用本身多少次,都只占用一个栈帧,不会出现栈溢出的情况。
def fact(n):
return fact_iter(n, 1)
def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
讲真的,我没有搞明白怎么优化了