반응형
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 |
댓글