本篇文章介绍Python中最大递归深度值的探讨。 Python对递归函数设置是有默认值。 可以通过下面命令来查看设置的默认值 import sys sys.getrecursionlimit()3000 查看该函数的帮助文件就更清晰了: help(sys.getrecursionlimit)Help on built-in function getr
本篇文章介绍Python中最大递归深度值的探讨。 Python对递归函数设置是有默认值。 可以通过下面命令来查看设置的默认值
查看该函数的帮助文件就更清晰了:
从上面的帮助信息可以看到,如果超过这个默认的最大递归深度,就会导致不可预测的错误,比如C栈溢出或其他错误。 下面用斐波那契数列的递归函数来测试下该方法,来看真正可行的最大递归深度.
当执行到默认的3000附近,2989时,上面是可以执行到的。当递归深度到2900时就报错了。
也就是最大的实际递归深度就是2989了,是否可以设置这个值大点呢? 可以通过这个方法来设置:
通过setrecursionlimit(10000)后再查看就是10000。再来测试下实际上的递归深度可以到多少,看是否在2989上有所增加呢?
可以看到我们设置最大递归深度10000,实际执行递归深度达到3400,不再报RecursionError错误,但会报关闭程序的提示。通过一个个单独调试,到3213还能显示正常答案。到3214就又报上面的提示了。
上面的是Python3.6.5得出的实际最大递归数字:3213。 同样一台计算机,用Python2.7.10,同样设置成默认最大递归深度10000,得出实际最大递归深度是4484
所以最终这个数字取决于计算机本身的计算能力和Python的版本,如果超过系统堆栈深度,Python无法支撑也就奔溃了。同样的PC,Python的版本不同,这个值都有差异。有的时候差异还很大。 原文链接:https://blog.csdn.net/Jerry_1126/article/details/85331736 |
2019-06-18
2019-07-04
2021-05-23
2021-05-27
2021-05-27