728x90
RecursionError: stack overflow in math function
오류는 수학 함수를 재귀적으로 잘못 호출하여 파이썬의 호출 스택(stack)이 넘칠 때 발생합니다. 특히 잘못 정의된 수학 함수나 종료 조건이 없는 수학적 재귀 함수에서 자주 발생합니다.
파이썬은 함수 호출마다 스택 프레임을 추가하며, 기본적으로 약 1000개의 호출 깊이를 초과하면 RecursionError
를 발생시킵니다. 재귀가 수학 연산 중 반복되거나 무한 루프에 빠지면 스택 오버플로우가 발생할 수 있습니다.
● 오류 발생 예시
def sqrt_recursive(x):
return sqrt_recursive(x / 2)
sqrt_recursive(16)
이 함수는 종료 조건 없이 자신을 계속 호출하므로 스택이 가득 차면서 RecursionError
가 발생합니다.
RecursionError: maximum recursion depth exceeded while calling a Python object
● 해결 방법
- 반드시 종료 조건 포함
- 재귀가 아닌 반복문 구조로 수학 함수 구현
math
모듈의 내장 함수 사용 고려 (예:math.sqrt
)
● 예시 코드 (종료 조건 포함)
def sqrt_recursive(x, epsilon=0.0001):
if abs(x - 1) < epsilon:
return x
return sqrt_recursive((x + 1) / 2)
● 자주 하는 실수
- 재귀 호출에서 종료 조건을 누락
- 자기 자신을 수학적으로 계속 호출하며 수렴하지 않는 구조 생성
- 이미 존재하는 수학 함수를 직접 재귀로 구현
● 결론
RecursionError - stack overflow in math function
오류는 수학적 재귀 구조에서 종료 조건이 없을 때 발생합니다. 가능하면 반복 구조를 사용하고, 기본 제공 수학 함수로 대체하는 것도 좋은 방법입니다.
728x90