设为首页 加入收藏

TOP

跟着廖雪峰学python 006
2023-07-23 13:45:43 】 浏览:23
Tags:廖雪峰 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标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题

?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何让电脑永不息屏?Python:这.. 下一篇用Python做一个抢票脚本,演唱会..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目