python之递归栈溢出优化方式
2018-05-10 21:22
134 查看
由于栈的大小不是无限的,所以递归调用的次数过多便会导致栈的溢出,通常解决栈溢出的方法
是尾递归优化,尾递归跟循环的效果一样,它在函数返回时调用函数本身,并在return语句不能包
含表达式。编译器和解释器就可以对尾递归进行优化,递归本身无论调用多少次都只占用一个栈帧
,从而避免栈的溢出。
代码实现:
#!usr/bin/python3
# -*- coding:UTF-8 -*-
def fact(m):
return fact_item(n, 1)
def fact_item(num, p):
if num == 1:
return p
return fact_item(num - 1, num * p)
print(fact(5))
代码的调用过程:
=====> fact_item(5, 1)
=====> fact_item(4, 5)
=====> fact_item(3, 20)
=====> fact_item(2, 60)
=====> fact_item(1, 120)
>>> 120
从结果就可以看到,调用尾递归的时候如果做出优化后,栈就不会增长,所以不管调用多少次都不会
导致栈溢出。
相关文章推荐
- python之递归栈溢出优化方式
- python用递归方式实现目录及子目录的搜索
- 一个很Cool的Idear->Python的尾递归优化
- 使用 Python 实现文件递归遍历的三种方式
- 【C语言】求取第n个斐波那契数的时间复杂度、空间复杂度分析,用三种方式实现(普通递归,循环,优化递归)
- 信春哥!Python递归原地满状态变显式堆栈!入教即送尾递归优化!
- 【python中二叉树的实现】python中二叉树的创建、三种方式递归遍历和非递归遍历
- 详解python使用递归、尾递归、循环三种方式实现斐波那契数列
- Python中的单例模式的几种实现方式的及优化
- 二分查找的两种实现方式(递归和非递归)--python实现
- 基于Python中单例模式的几种实现方式及优化详解
- Python:用最简单的方式弄懂汉诺塔问题 还有递归
- Python中的单例模式的几种实现方式的及优化
- 使用 Python 实现文件递归遍历的 3 种方式
- 分别用的列表,递归,生成器三种方式创建出n个元素的斐波那契数列(Python3实现)
- python 递归的使用和优化
- andorid小记读取Bitmap 的几种方式和优化内存溢出
- 快速排序quick_sort(python的两种实现方式)
- python字符串连接方式汇总
- python 二分法查找实例(递归、循环)