亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

长岭县| 松潘县| 灵川县| 宣化县| 塔河县| 娄烦县| 靖宇县| 东乡| 翁源县| 西充县| 大化| 沐川县| 开封市| 秀山| 武隆县| 凤台县| 道真| 岢岚县| 吴川市| 申扎县| 通辽市| 都昌县| 阳朔县| 呈贡县| 赤水市| 榕江县| 民乐县| 大厂| 凤翔县| 柯坪县| 沿河| 和硕县| 霍城县| 合山市| 澄迈县| 陆良县| 虎林市| 饶河县| 昆明市| 东宁县| 合水县|