PHpullh
학습 라이브러리/Python/꼬리 재귀 최적화

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를 지원하지 않습니다. 성능이 중요하면 처음부터 반복문으로 작성하세요.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.