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
- python format的用法(Python中format格式输出全解)
- python中字典的常用操作(11个Python3字典内置方法大全与示例汇总)
- python字典键对应的值(Python 互换字典的键值对实例)
- python获取股票每天k线(使用PyQtGraph绘制精美的股票行情K线图的示例代码)
- python线程池如何实现同步(Python mutiprocessing多线程池pool操作示例)
- python装饰器怎么编写(Python函数装饰器常见使用方法实例详解)
- python如何安装requests模块(Python常用模块之requests模块用法分析)
- pythonjpg转pdf格式(Python使用到第三方库PyMuPDF图片与pdf相互转换)
- python测试websocket接口(Python如何爬取实时变化的WebSocket数据的方法)
- python能操作微信定时发消息(python给微信好友定时推送消息的示例)
- python的静态方法和类方法(深入解析python中的实例方法、类方法和静态方法)
- python获取网络数据tcp(Python选择网卡发包及接收数据包)
- python基于django的博客系统(利用django+wechat-python-sdk 创建微信服务器接入的方法)
- vscode如何配置python环境(VSCode Python开发环境配置的详细步骤)
- python str类型怎么转换(Python3中的bytes和str类型详解)
- centos8配置python开发环境(CentOS6.9 Python环境配置python2.7、pip、virtualenv)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
- 大女主 汤唯垂青电视圈,搭档朱亚文出演《大明皇妃孙若微传》(汤唯垂青电视圈)
- 红色代表什么(红色代表什么情感和含义)
- 高中数学题(高中数学题型总结及解题方法)
- 冰岛旅游攻略(冰岛旅游攻略及花费)
热门推荐
- pythonhash使用(详解python中的hashlib模块的使用)
- IIS8.0安装配置完整图文教程 IIS8.0的Web Server asp设置(IIS8.0安装配置完整图文教程 IIS8.0的Web Server asp设置)
- linux基础教程磁盘配额的设计(WDCP Linux服务器磁盘爆满的处理方法)
- mpp数据库的客户端工具(xampp默认mysql数据库root密码的修改)
- docker配置https访问方式(docker 中配置 eureka的方法)
- python处理水印(Yii 使用intervention/image拓展实现图像处理功能)
- python scrapy 框架原理(一步步教你用python的scrapy编写一个爬虫)
- asp服务器记录怎么发布(asp服务器如何搭建)
- 由于Web服务器上的“ISAPI 和CGI 限制”的解决方法
- binlog怎么恢复mysql数据库(mysql5.7使用binlog 恢复数据的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9