PYTHON · 함수
꼬리 재귀 최적화
Python은 꼬리 재귀 최적화를 지원하지 않지만, 데코레이터로 비슷한 효과를 구현할 수 있습니다.
함수고급tail recursion꼬리 재귀TCO최적화
핵심 설명
Python은 꼬리 재귀 최적화를 지원하지 않지만, 데코레이터로 비슷한 효과를 구현할 수 있습니다.
Python code
# 꼬리 재귀 → 반복 변환 데코레이터
class TailCall:
def __init__(self, func, args, kwargs):
self.func = func
self.args = args
self.kwargs = kwargs
def tail_recursive(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
while isinstance(result, TailCall):
result = result.func(*result.args, **result.kwargs)
return result
def tail_call(*args, **kwargs):
return TailCall(wrapper, args, kwargs)
wrapper.tail_call = tail_call
return wrapper
@tail_recursive
def sum_to(n, acc=0):
if n == 0:
return acc
return sum_to.tail_call(n - 1, acc + n)
print(sum_to(100000)) # 5000050000 (스택 오버플로 없음)
# 일반 재귀 대비
def sum_to_naive(n, acc=0):
if n == 0:
return acc
return sum_to_naive(n - 1, acc + n)
# sum_to_naive(100000) # RecursionError!학습 팁
꼬리 재귀 패턴: 재귀 호출이 함수의 마지막 연산이고, 누적값을 인자로 전달합니다.
주의할 점
Python은 공식적으로 TCO를 지원하지 않습니다. 성능이 중요하면 처음부터 반복문으로 작성하세요.
자주 묻는 질문
꼬리 재귀 최적화란 무엇인가요?
Python은 꼬리 재귀 최적화를 지원하지 않지만, 데코레이터로 비슷한 효과를 구현할 수 있습니다.
꼬리 재귀 최적화 학습 시 주의할 점은 무엇인가요?
Python은 공식적으로 TCO를 지원하지 않습니다. 성능이 중요하면 처음부터 반복문으로 작성하세요.