欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

>>> 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.

從上面的幫助信息可以看到,如果超過這個默認(rèn)的最大遞歸深度,就會導(dǎo)致不可預(yù)測的錯誤,比如C棧溢出或其他錯誤。 下面用斐波那契數(shù)列的遞歸函數(shù)來測試下該方法,來看真正可行的最大遞歸深度.

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

當(dāng)執(zhí)行到默認(rèn)的3000附近,2989時,上面是可以執(zhí)行到的。當(dāng)遞歸深度到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了,是否可以設(shè)置這個值大點呢? 可以通過這個方法來設(shè)置:

>>> import sys
>>> sys.setrecursionlimit(10000)
>>> sys.getrecursionlimit()
10000

通過setrecursionlimit(10000)后再查看就是10000。再來測試下實際上的遞歸深度可以到多少,看是否在2989上有所增加呢?

可以看到我們設(shè)置最大遞歸深度10000,實際執(zhí)行遞歸深度達(dá)到3400,不再報RecursionError錯誤,但會報關(guān)閉程序的提示。通過一個個單獨調(diào)試,到3213還能顯示正常答案。到3214就又報上面的提示了。

>>> fib(3213)
5163291

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

同樣一臺計算機(jī),用Python2.7.10,同樣設(shè)置成默認(rèn)最大遞歸深度10000,得出實際最大遞歸深度是4484

>>> fib(4484)
10055370

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

總結(jié)

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

相關(guān)文章

  • Python NumPy中diag函數(shù)的使用說明

    Python NumPy中diag函數(shù)的使用說明

    這篇文章主要介紹了Python NumPy中diag函數(shù)的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • python應(yīng)用程序在windows下不出現(xiàn)cmd窗口的辦法

    python應(yīng)用程序在windows下不出現(xiàn)cmd窗口的辦法

    這篇文章主要介紹了python應(yīng)用程序在windows下不出現(xiàn)cmd窗口的辦法,適用于python寫的GTK程序并用py2exe編譯的情況下,需要的朋友可以參考下
    2014-05-05
  • Python動態(tài)語言與鴨子類型詳解

    Python動態(tài)語言與鴨子類型詳解

    這篇文章主要介紹了Python動態(tài)語言與鴨子類型詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python批量查詢關(guān)鍵詞微信指數(shù)實例方法

    Python批量查詢關(guān)鍵詞微信指數(shù)實例方法

    在本篇文章中小編給大家整理的是關(guān)于Python批量查詢關(guān)鍵詞微信指數(shù)實例方法以及相關(guān)代碼,需要的朋友們可以跟著學(xué)習(xí)下。
    2019-06-06
  • python manage.py runserver流程解析

    python manage.py runserver流程解析

    這篇文章主要介紹了python manage.py runserver流程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

    python 模擬網(wǎng)站登錄——滑塊驗證碼的識別

    這篇文章主要介紹了python 模擬網(wǎng)站登錄——滑塊驗證碼的識別,幫助大家更好的理解和學(xué)習(xí)使用python的爬蟲技術(shù),感興趣的朋友可以了解下
    2021-03-03
  • Django中反向生成models.py的實例講解

    Django中反向生成models.py的實例講解

    今天小編就為大家分享一篇Django中反向生成models.py的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Flask-Docs自動生成Api文檔安裝使用教程

    Flask-Docs自動生成Api文檔安裝使用教程

    這篇文章主要為大家介紹了Flask-Docs自動生成Api文檔安裝使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 使用Python腳本來控制Windows Azure的簡單教程

    使用Python腳本來控制Windows Azure的簡單教程

    這篇文章主要介紹了使用Python腳本來控制Windows Azure的簡單教程,由于微軟官方提供了Python SDK,使得用戶自己用Python控制Azure成為了可能,需要的朋友可以參考下
    2015-04-04
  • 樸素貝葉斯算法的python實現(xiàn)方法

    樸素貝葉斯算法的python實現(xiàn)方法

    這篇文章主要介紹了樸素貝葉斯算法的python實現(xiàn)方法,詳細(xì)分析了樸素貝葉斯算法的特性及用途,并給出了基于python的實現(xiàn)方法,需要的朋友可以參考下
    2014-11-11

最新評論