Python中最大递归深度值的探讨


Posted in Python onMarch 05, 2019

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上有所增加呢?

Python中最大递归深度值的探讨

可以看到我们设置最大递归深度10000,实际执行递归深度达到3400,不再报RecursionError错误,但会报关闭程序的提示。通过一个个单独调试,到3213还能显示正常答案。到3214就又报上面的提示了。

>>> fib(3213)
5163291

上面的是Python3.6.5得出的实际最大递归数字:3213。

同样一台计算机,用Python2.7.10,同样设置成默认最大递归深度10000,得出实际最大递归深度是4484

>>> fib(4484)
10055370

所以最终这个数字取决于计算机本身的计算能力和Python的版本,如果超过系统堆栈深度,Python无法支撑也就奔溃了。同样的PC,Python的版本不同,这个值都有差异。有的时候差异还很大。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python卸载模块的方法汇总
Jun 07 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
python中正则表达式的使用方法
Feb 25 Python
python针对excel的操作技巧
Mar 13 Python
python贪吃蛇游戏代码
Apr 18 Python
python提取log文件内容并画出图表
Jul 08 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
python二进制读写及特殊码同步实现详解
Oct 11 Python
python 实现矩阵按对角线打印
Nov 29 Python
python实现连连看游戏
Feb 14 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 Python
Python小进度条显示代码
Mar 05 #Python
Python嵌套式数据结构实例浅析
Mar 05 #Python
Python字典遍历操作实例小结
Mar 05 #Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 #Python
Python之lambda匿名函数及map和filter的用法
Mar 05 #Python
django中ORM模型常用的字段的使用方法
Mar 05 #Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 #Python
You might like
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
python获取本机外网ip的方法
2015/04/15 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
深入了解python列表(LIST)
2020/06/08 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
体育运动口号
2014/06/09 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
2016年暑期见闻作文
2015/11/25 职场文书