python防止栈溢出的实例讲解
1、说明
使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。
2、实例
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(5)的调用过程
===> fact_iter(5, 1)
===> fact_iter(4, 5)
===> fact_iter(3, 20)
===> fact_iter(2, 60)
===> fact_iter(1, 120)
===> 120
知识点扩展:
栈溢出
在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试fact(1000):
>>> fact(1000)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in fact
...
File "<stdin>", line 4, in fact
RuntimeError: maximum recursion depth exceeded
(资源库 www.zyku.net)
原文链接:https://www.py.cn/jishu/jichu/30482.html
您可能感兴趣的文章
- 03-04oppok7x屏幕截图方法
- 12-29文明潞城-文明潞城应用软件功能介绍
- 02-28WordPress自定义数据库链接时错误页的
- 02-08用python实现一个无界面的小型图书管
- 01-09clife睡眠-clife睡眠应用软件功能介绍
- 01-17oppo手机如何训练小布
- 02-20Ubuntu使用命令刷新DNS缓存提高网站访
- 12-25智汀智能-智汀智能应用软件功能介绍
- 01-31一加8t深色模式启用方法
- 09-23钉钉如何编辑表格
- 01-09Photomath计算器-Photomath计算器应用
- 07-27PHP自定义函数判断是否为Get、Post及A
- 02-28帝国CMS登录后台提示"您的Cookie没有
- 01-12转盘随机决定-转盘随机决定应用软件功
- 09-20vivox70应用加密功能在哪里
- 09-15ColorOS12尝鲜报名教程分享
- 02-19PhpWind教程:快速修复损坏的MySQL数据
- 03-26vivox60pro相机全屏功能开启方法
- 03-16opporeno6多景录像操作模式使用方法
- 09-17vivox70pro红包提醒功能设置步骤分享
最近更新
阅读排行
猜你喜欢
- 08-15美团饭小圈好友怎么添加
- 03-15Debain下解决Sublime Text无法输入中
- 02-13Python图片处理之图片裁剪教程
- 10-26ios15如何截长图
- 06-23PS设计艺术字作为logo图案的方法
- 06-26Nginx实现跨域使用字体文件的配置详解
- 04-15vivos9开启小v智能语音助手方法
- 01-08胰腺健康-胰腺健康应用软件功能介绍
- 11-05QQ音乐怎么订阅每月听歌报告
- 01-10星球壁纸自制-星球壁纸自制应用软件功