PHpullh

PYTHON · 함수

재귀 한계

Python의 재귀 깊이 제한과 이를 다루는 방법입니다. 기본 한계는 1000이며 스택 오버플로를 방지합니다.

함수고급recursion재귀setrecursionlimittrampoline

핵심 설명

Python의 재귀 깊이 제한과 이를 다루는 방법입니다. 기본 한계는 1000이며 스택 오버플로를 방지합니다.

Python code

import sys

# 현재 재귀 한계 확인
print(f"기본 재귀 한계: {sys.getrecursionlimit()}")

# 재귀 한계 변경 (주의해서 사용)
sys.setrecursionlimit(5000)

# 재귀를 반복으로 변환 (꼬리 재귀 최적화)
def factorial_recursive(n):
    if n <= 1:
        return 1
    return n * factorial_recursive(n - 1)

def factorial_iterative(n):
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result

# 트램폴린 기법으로 재귀 제한 우회
def trampoline(func):
    def wrapper(*args):
        result = func(*args)
        while callable(result):
            result = result()
        return result
    return wrapper

def _factorial(n, acc=1):
    if n <= 1:
        return acc
    return lambda: _factorial(n - 1, n * acc)

factorial_safe = trampoline(_factorial)
print(factorial_safe(10000))  # 큰 수도 가능

학습 팁

깊은 재귀가 필요하면 반복문으로 변환하거나 트램폴린 기법을 사용하세요.

주의할 점

sys.setrecursionlimit()을 너무 높이면 실제 스택 오버플로(segfault)가 발생할 수 있습니다.

자주 묻는 질문

재귀 한계란 무엇인가요?

Python의 재귀 깊이 제한과 이를 다루는 방법입니다. 기본 한계는 1000이며 스택 오버플로를 방지합니다.

재귀 한계 학습 시 주의할 점은 무엇인가요?

sys.setrecursionlimit() 을 너무 높이면 실제 스택 오버플로(segfault)가 발생할 수 있습니다.