Python - AI 助手

Python sys.setrecursionlimit() 方法



Python 的 sys.setrecursionlimit() 方法用於將 Python 直譯器棧的最大深度設定為指定的限制。這在處理遞迴函式時非常有用,因為 Python 的預設遞迴限制相對較低,通常為 1000,對於深度遞迴可能會導致 RecursionError 錯誤。

透過使用 sys.setrecursionlimit(limit) 增加遞迴限制,我們可以允許更深的遞迴發生而不會遇到限制,但應謹慎使用,因為過度深的遞迴會導致堆疊溢位並使程式崩潰。 正確管理遞迴深度對於避免無限遞迴和系統不穩定至關重要。

語法

以下是 Python sys.setrecursionlimit() 方法的語法和引數:

sys.setrecursionlimit(limit)

引數

此方法接受一個整數,表示新的遞迴限制。

返回值

此方法不返回值。

示例 1

以下示例顯示了遞迴限制如何從預設的 1000 增加到 2000,允許遞迴函式處理更深的遞迴而不會觸發 RecursionError 錯誤:

import sys

# Default recursion limit
print(sys.getrecursionlimit())  

# Set a new recursion limit
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit())  

# Example of a recursive function
def recursive_function(n):
    if n == 0:
        return 0
    else:
        return 1 + recursive_function(n - 1)

try:
    print(recursive_function(1500))  
except RecursionError:
    print("Recursion limit exceeded")

輸出

1000
2000
1500

示例 2

此示例演示瞭如何使用 sys.setrecursionlimit() 方法處理需要更深遞迴的函式:

import sys

# Function with deep recursion
def deep_recursion(n):
    if n == 0:
        return "Reached the end"
    else:
        return deep_recursion(n - 1)

# Try with default recursion limit
try:
    print(deep_recursion(1500))  # Likely to raise RecursionError
except RecursionError:
    print("RecursionError with default limit")

# Set a higher recursion limit
sys.setrecursionlimit(2000)

# Try again with higher limit
try:
    print(deep_recursion(1500))  # Should work without error
except RecursionError:
    print("RecursionError even with higher limit")

輸出

RecursionError with default limit
Reached the end

示例 3

此示例計算一個大數的階乘,顯示了需要增加遞迴限制以處理大型遞迴計算:

import sys

# Factorial function with recursion
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

# Default recursion limit is usually sufficient
try:
    print(factorial(995))  # Should work fine
except RecursionError:
    print("Recursion limit exceeded")

# Increase recursion limit to handle larger inputs
sys.setrecursionlimit(1500)

try:
    print(factorial(1200))  # Should work now with increased limit
except RecursionError:
    print("Recursion limit exceeded even with higher limit")

輸出

4064374293729118100717076205049963163696947795811066648039580324660695257469883785154417906181986826077637
-----------------
-----------------
-----------------
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
python_modules.htm
廣告