python中递归方法(Python中最大递归深度值的探讨)
python中递归方法
Python中最大递归深度值的探讨python对递归函数设置是有默认值。 可以通过下面命令来查看设置的默认值
|
>>> import sys >>> sys.getrecursionlimit() 3000 |
查看该函数的帮助文件就更清晰了:
|
>>> help (sys.getrecursionlimit) help on built - in function getrecursionlimit in module sys: getrecursionlimit(...) getrecursionlimit() return the current value of the recursion limit, the maximum depth of the python interpreter stack. this limit prevents infinite recursion from causing an overflow of the c stack and crashing python. |
从上面的帮助信息可以看到,如果超过这个默认的最大递归深度,就会导致不可预测的错误,比如c栈溢出或其他错误。 下面用斐波那契数列的递归函数来测试下该方法,来看真正可行的最大递归深度.
|
>>> def fib(n): ... if n = = 1 : ... return 1 ... else : ... return fib(n - 1 ) + n >>> fib( 2989 ) 4468555 |
当执行到默认的3000附近,2989时,上面是可以执行到的。当递归深度到2900时就报错了。
|
>>> fib( 2990 ) traceback (most recent call last): file "<stdin>" , line 1 , in <module> file "<stdin>" , line 5 , in fib file "<stdin>" , line 5 , in fib file "<stdin>" , line 5 , in fib [previous line repeated 2985 more times] file "<stdin>" , line 2 , in fib recursionerror: maximum recursion depth exceeded in comparison maximum recursion depth exceeded in comparison |
也就是最大的实际递归深度就是2989了,是否可以设置这个值大点呢? 可以通过这个方法来设置:
|
>>> import sys >>> sys.setrecursionlimit( 10000 ) >>> sys.getrecursionlimit() 10000 |
通过setrecursionlimit(10000)后再查看就是10000。再来测试下实际上的递归深度可以到多少,看是否在2989上有所增加呢?
可以看到我们设置最大递归深度10000,实际执行递归深度达到3400,不再报recursionerror错误,但会报关闭程序的提示。通过一个个单独调试,到3213还能显示正常答案。到3214就又报上面的提示了。
|
>>> fib( 3213 ) 5163291 |
上面的是python3.6.5得出的实际最大递归数字:3213。
同样一台计算机,用python2.7.10,同样设置成默认最大递归深度10000,得出实际最大递归深度是4484
|
>>> fib( 4484 ) 10055370 |
所以最终这个数字取决于计算机本身的计算能力和python的版本,如果超过系统堆栈深度,python无法支撑也就奔溃了。同样的pc,python的版本不同,这个值都有差异。有的时候差异还很大。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/Jerry_1126/article/details/85331736
- python3.7标准库官方手册(Python3.7 dataclass使用指南小结)
- python常用列表函数和方法(Python enumerate函数功能与用法示例)
- python的4种数字变量(Python将字符串常量转化为变量方法总结)
- python自定义定时任务(python的schedule定时任务模块二次封装方法)
- python简单代码实例(Python实现 版本号对比功能的实例代码)
- python怎么爬取excel数据(python爬取内容存入Excel实例)
- python怎么自动刷抖音(python实现抖音点赞功能)
- python3常见问题(对Python3使运行暂停的方法详解)
- python炫酷烟花源代码(python实现浪漫的烟花秀)
- python中的time时间模块使用知识(python实现简单日期工具类)
- python opencv图像表格处理(Opencv-Python图像透视变换cv2.warpPerspective的示例)
- python scrapy 框架原理(一步步教你用python的scrapy编写一个爬虫)
- python 组合数据类型(详解Python3 对象组合zip和回退方式*zip)
- python中encode中文自定义编码(详解Python解决抓取内容乱码问题decode和encode解码)
- python 多进程读取文件(Python实现的多进程拷贝文件并显示百分比功能示例)
- pyqt一键部署python环境(python使用PyQt5的简单方法)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
- 华为 联想等46家公司笔试面试题,涉及各行各业,建议收藏(联想等46家公司笔试面试题)
- ()
- ()
- 800壮士拼死拖住30万日军 八佰 的真实历史,誓与阵地共存亡(800壮士拼死拖住30万日军)
- 演员陈创,火于 哮天犬 ,颠峰于 福贵 ,现状却令人唏嘘(演员陈创火于哮天犬)
热门推荐
- html5显示中心代码(HTML5中的Web Notification桌面通知功能的实现方法)
- php收集多个统计数据(PHP实现统计代码行数小工具)
- 自制cssdiv导航栏(css利用transform skewX制作平行四边形导航菜单)
- 怎么选择云服务器(云服务器配置如何选择你知道吗?)
- linux宝塔面板安装后怎么打开(Linux宝塔面板7.30推出文件外链分享功能)
- 云服务器git(详解在阿里云上搭建自己的git服务器)
- css3弹性盒模型常用属性(CSS3弹性盒模型开发笔记三)
- laravel命令控制器怎么设置(Laravel获取当前请求的控制器和方法以及中间件的例子)
- mysql的innodb引擎数据结构(MySQL InnoDB架构的相关总结)
- dedecms怎么设置翻页(DEDECMS中获取无限栏目子分类的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9