临时帮扶队员 发表于 2023-3-2 22:44:21

跟着廖雪峰学python 006



[*]递归函数
在函数内部调用自身本身
计算阶乘:
def fact(n):
    if n == 1:
      return 1
    return n * fact(n - 1)注意:使用递归函数需要防止栈溢出。
在计算机中,函数调用是通过栈(stack)实现,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多会导致栈溢出。
 
解决方法:尾递归优化。
尾递归: 在函数返回时,调用自身本身,且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)fact(n)函数,由于return引入乘法表达式所以不是尾递归
fact_iter(num,product)函数,仅返回递归函数本身
尾递归调用如果做了优化,栈不会增长,无论多少次调用也不会导致栈溢出。
python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题

来源:https://www.cnblogs.com/DJC-Allen/p/17173570.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 跟着廖雪峰学python 006