1. 程式人生 > >python遞迴次數限制

python遞迴次數限制

轉載自:http://www.cnblogs.com/wozijisun/p/5642540.html

 

實際應用中遇到了一個python遞迴呼叫的問題,報錯如下:

RuntimeError: maximum recursion depth exceeded while calling a Python object

 

網上找了一下,原來Python確實有遞迴次數限制,預設最大次數為1000

 

在正常的python裡: 
  
In [1]: sys.setrecursionlimit? 
Type: builtin_function_or_method 
Base Class: <type 'builtin_function_or_method'> 
String Form: <built-in function setrecursionlimit> 
Namespace: Interactive 
Docstring: 
     setrecursionlimit(n) 
      
     Set the maximum depth of the Python interpreter stack to  
n.  This limit prevents infinite recursion from causing an  
overflow of the C stack and crashing Python.  The highest  
possible limit is platform-dependent. 

 

 

 

那麼如何進行判斷處理呢?下面給出兩段程式碼,供參考。

程式碼如下:

1 def recursion(n): 
2     if(n <= 0): 
3         return 
4     print n 
5     recursion(n - 1) 
6 
7 if __name__ == "__main__":
8     recursion(1000)
View Code

 

當在我自己的機器執行以上程式碼時,發現最多能列印到998,然後就會丟擲 “RuntimeError: maximum recursion depth exceeded” 的錯誤了。 嘿,還真有限制。但轉念一想,python不會這麼弱吧。經過一番查詢,發現這是python專門設定的一種機制用來防止無限遞迴造成Python溢位崩潰, 最大遞迴次數是可以重新調整的。 (

http://docs.python.org/2/library/sys.html#sys.setrecursionlimit),修改程式碼如下:

 1 import sys
 2 sys.setrecursionlimit(1500) # set the maximum depth as 1500
 3 
 4 def recursion(n): 
 5     if(n <= 0): 
 6         return 
 7     print n 
 8     recursion(n - 1) 
 9 
10 if __name__ == "__main__"
: 11 recursion(1200)
View Code

 

再次執行,順利通過!!!