본문 바로가기
Error(Exception)/ERROR-PYTHON

[python] RecursionError

by 조조군 2024. 12. 1.
반응형

RecursionError


1. 오류 설명

  • RecursionError는 파이썬에서 재귀 호출이 너무 깊어져 재귀 한도(기본값: 1,000회)를 초과했을 때 발생합니다.
  • 파이썬은 무한 재귀 호출을 방지하기 위해 기본 재귀 깊이 한도를 설정합니다. 재귀가 한도를 초과하면 RecursionError: maximum recursion depth exceeded라는 오류가 발생합니다.

2. 오류 예시

다음은 무한 재귀 호출로 인해 RecursionError가 발생하는 예시입니다.

def recursive_function():
    return recursive_function()  # 자기 자신을 무한 호출

recursive_function()

3. 오류 해결책

  • 재귀 한도 초과 원인 분석 및 수정:
    • 무한 재귀 호출을 피하도록 종료 조건을 명확히 설정합니다.
    • 재귀를 반복문으로 변환하는 것도 방법입니다.
  • 재귀 깊이 증가 (임시 방편):
    • sys.setrecursionlimit()을 사용해 재귀 한도를 늘릴 수 있지만, 이 방법은 메모리 초과를 유발할 위험이 있으므로 권장하지 않습니다.

4. 오류 예제 코드 및 해결 코드

오류 예제 코드:

# 종료 조건 없이 무한 재귀 호출
def factorial(n):
    return n * factorial(n - 1)

factorial(5)

해결 코드:

  • 종료 조건 추가:
    # 종료 조건을 추가하여 문제 해결
    def factorial(n):
      if n == 0:  # 종료 조건
          return 1
      return n * factorial(n - 1)
    

print(factorial(5)) # 출력: 120


- **반복문으로 변환**:
```python
# 재귀 대신 반복문 사용
def factorial_iterative(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

print(factorial_iterative(5))  # 출력: 120
  • 재귀 깊이 증가 (비추천):
    import sys
    

재귀 깊이 한도를 늘림

sys.setrecursionlimit(2000)

def factorial(n):
if n == 0: # 종료 조건
return 1
return n * factorial(n - 1)

print(factorial(5)) # 출력: 120

```


주의 사항

  • 재귀 호출 사용 시 반드시 종료 조건을 명확히 설정해야 합니다.
  • 재귀 깊이 한도를 무작정 늘리면 메모리 문제를 유발할 수 있으니 필요시 반복문으로의 변환을 우선 고려하세요.
반응형

'Error(Exception) > ERROR-PYTHON' 카테고리의 다른 글

[python] StopIteration  (0) 2024.12.03
[python] ReferenceError  (0) 2024.12.02
[python] OverflowError  (0) 2024.11.30
[python] OSError  (1) 2024.11.29
[python] NotImplementedError  (0) 2024.11.28

댓글