重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关Python中大递归深度值的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联公司自2013年起,先为云和等服务建站,云和等地企业,进行企业商务咨询服务。为云和企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。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 "", line 1, in File " ", line 5, in fib File " ", line 5, in fib File " ", line 5, in fib [Previous line repeated 2985 more times] File " ", 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的版本不同,这个值都有差异。有的时候差异还很大。
关于“Python中大递归深度值的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。