안녕하세요, 코딩하는곰입니다. 오늘은 파이썬 개발자라면 한 번쯤 마주치는 RecursionError에 대해 깊이 있게 다루어보려고 합니다. 재귀 함수를 사용하다 보면 “maximum recursion depth exceeded”라는 에러 메시지를 본 적이 있을 겁니다. 이 에러는 파이썬이 기본적으로 설정한 재귀 호출 한도를 초과했을 때 발생합니다. 이번 포스팅에서는 이 오류의 원인부터 해결 방법, 재귀 함수 설계 시 주의사항까지 모두 알려드리겠습니다. 특히 알고리즘 문제를 풀 때 자주 발생하는 이슈이니 끝까지 집중해주세요!
파이썬에서 재귀 함수는 자기 자신을 호출하는 함수를 말합니다. 하지만 파이썬 인터프리터는 재귀 호출의 깊이를 제한하는데, 이는 무한 재귀에 빠져 스택 메모리가 고갈되는 것을 방지하기 위함입니다. 기본 재귀 한도는 일반적으로 1000회로 설정되어 있습니다.
def factorial(n):if n == 1:return 1return n * factorial(n-1)print(factorial(1000)) # RecursionError 발생!
위 코드에서 factorial(1000)을 호출하면 재귀 깊이가 1000을 초과하여 오류가 발생합니다. 이때 콜 스택(call stack)이 어떻게 쌓이는지 이해하는 것이 중요합니다. 각 재귀 호출은 스택 프레임을 생성하며, 이 스택 프레임은 함수의 지역 변수, 매개변수, 리턴 주소 등을 저장합니다.
⚡ 개발 실력을 향상시키고 싶다면, (자바 기초) 자바 프로그램의 컴파일과 실행 과정 완벽 이해하기를 참고해보세요.
import syssys.setrecursionlimit(5000) # 재귀 한도를 5000으로 증가
웹디자인을 하다 보면 원하는 색상의 HEX 또는 RGB 값을 빠르게 확인해야 할 때가 있습니다. 이럴 땐 컬러피커 도구를 활용해보세요.
피보나치 수열을 재귀와 반복문으로 각각 구현한 경우:
# 재귀 방식 (비효율적)def fib_recursive(n):if n <= 1:return nreturn fib_recursive(n-1) + fib_recursive(n-2)# 반복문 방식 (효율적)def fib_iterative(n):a, b = 0, 1for _ in range(n):a, b = b, a + breturn a
성능 측정 결과:
중복되지 않고 예측하기 어려운 비밀번호를 만들고 싶다면 보안에 특화된 무작위 비밀번호 생성기를 추천합니다.
오늘 다룬 내용을 정리하자면, RecursionError는 파이썬의 안전 장치이며, 무조건 재귀 한도를 늘리는 것보다는 알고리즘을 재고하는 것이 근본적인 해결책입니다. 코딩하는곰의 경험상, 복잡한 문제도 반복문과 스택을 조합하면 대부분 해결 가능합니다. 다음 포스팅에서는 재귀 알고리즘의 실제 응용 사례를 더 깊이 있게 다루겠습니다. 질문이 있으시면 댓글로 남겨주세요! 파이썬으로 코딩할 때 여러분이 만나는 재귀 관련 문제를 함께 고민해보겠습니다.
로또 번호를 더 스마트하게 선택하고 싶다면, AI 분석 기반 번호 추천 앱 지니로또AI를 활용해보는 것이 좋습니다.
