国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-01-04 13:35:14
字體:
來源:轉載
供稿:網友

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 fibRecursionError: maximum recursion depth exceeded in comparisonmaximum 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的版本不同,這個值都有差異。有的時候差異還很大。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德安县| 上栗县| 兴宁市| 怀远县| 河西区| 彰化市| 苏尼特右旗| 青铜峡市| 株洲市| 马公市| 融水| 闸北区| 成都市| 盘山县| 上杭县| 含山县| 遵义县| 苏尼特左旗| 满城县| 江阴市| 娄底市| 胶州市| 双江| 固镇县| 宁城县| 潼关县| 昂仁县| 确山县| 贡觉县| 哈尔滨市| 广灵县| 吕梁市| 壶关县| 景东| 柘城县| 毕节市| 绥中县| 嘉祥县| 旬阳县| 宝山区| 香河县|