翼度科技»论坛 编程开发 python 查看内容

跟着廖雪峰学python 006

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30


  • 递归函数
在函数内部调用自身本身
计算阶乘:
  1. def fact(n):
  2.     if n == 1:
  3.         return 1
  4.     return n * fact(n - 1)
复制代码
注意:使用递归函数需要防止栈溢出。
在计算机中,函数调用是通过栈(stack)实现,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多会导致栈溢出。
 
解决方法:尾递归优化。
尾递归: 在函数返回时,调用自身本身,且return语句不能包含表达式。
计算阶乘:
  1. def fact(n):
  2.     return fact_iter(n, 1)
  3. def fact_iter(num, product):
  4.     if num == 1:
  5.         return product
  6.     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】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具