中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中最大遞歸深度值的示例分析

發布時間:2021-08-26 10:39:58 來源:億速云 閱讀:220 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關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上有所增加呢?

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中最大遞歸深度值的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

津南区| 营山县| 甘德县| 徐水县| 五寨县| 石嘴山市| 威海市| 娄底市| 阳信县| 静乐县| 固始县| 清水县| 汽车| 奉贤区| 岳阳县| 曲松县| 南投县| 廊坊市| 澎湖县| 石泉县| 青河县| 新营市| 县级市| 石景山区| 霸州市| 大兴区| 边坝县| 漯河市| 金坛市| 石屏县| 凌云县| 扎赉特旗| 汽车| 海口市| 深州市| 博兴县| 和田县| 庆元县| 沾益县| 灯塔市| 长垣县|