再理解递归函数

递归函数

标签(空格分隔): 重新理解一遍递归


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)

讲真的,我没有搞明白怎么优化了

你可能感兴趣的:(再理解递归函数)