最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中最大遞歸深度值的探討

 更新時間:2019年03月05日 14:23:21   作者:杰瑞26  
今天小編就為大家分享一篇關于Python中最大遞歸深度值的探討,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

Python對遞歸函數(shù)設置是有默認值。 可以通過下面命令來查看設置的默認值

>>> import sys
>>> sys.getrecursionlimit()
3000

查看該函數(shù)的幫助文件就更清晰了:

>>> 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棧溢出或其他錯誤。 下面用斐波那契數(shù)列的遞歸函數(shù)來測試下該方法,來看真正可行的最大遞歸深度.

>>> def fib(n):
...  if n == 1:
...   return 1
...  else:
...   return fib(n-1) + n
>>> fib(2989)
4468555

當執(zhí)行到默認的3000附近,2989時,上面是可以執(zhí)行到的。當遞歸深度到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,實際執(zhí)行遞歸深度達到3400,不再報RecursionError錯誤,但會報關閉程序的提示。通過一個個單獨調試,到3213還能顯示正常答案。到3214就又報上面的提示了。

>>> fib(3213)
5163291

上面的是Python3.6.5得出的實際最大遞歸數(shù)字:3213。

同樣一臺計算機,用Python2.7.10,同樣設置成默認最大遞歸深度10000,得出實際最大遞歸深度是4484

>>> fib(4484)
10055370

所以最終這個數(shù)字取決于計算機本身的計算能力和Python的版本,如果超過系統(tǒng)堆棧深度,Python無法支撐也就奔潰了。同樣的PC,Python的版本不同,這個值都有差異。有的時候差異還很大。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

最新評論

宁津县| 城步| 红河县| 响水县| 旬阳县| 普定县| 新源县| 呼伦贝尔市| 克拉玛依市| 绥中县| 翼城县| 遂昌县| 麻阳| 富宁县| 尼玛县| 日照市| 天门市| 柳林县| 营山县| 东阳市| 临夏县| 连平县| 临汾市| 白玉县| 嘉兴市| 乌恰县| 新邵县| 陈巴尔虎旗| 海淀区| 孝昌县| 宁晋县| 洛扎县| 襄汾县| 通城县| 鄯善县| 濉溪县| 岗巴县| 特克斯县| 浙江省| 乌拉特前旗| 绥宁县|