트램폴린
수정일: 2026. 2. 5.
태그:
-
트램폴린
- 재귀의 단점을 극복할 수 있는 방법 중 하나
- 하나의 콜스택만을 사용
-
예시
function isEven(n) {
if (n === 0) return true;
return () => isOdd(n - 1);
}
function isOdd(n) {
if (n ===0) return false;
return () => isEven(n - 1);
}
// 트램폴린 실행기
function trampoline(fn) {
while (typeof fn === 'function') {
fn = fn();
}
return fn;
}
trampoline(() => isEven(10000));
위 코드를 재귀로 바꾼다면 아래와 같이 재귀적인 호출로 바꿀 수 있습니다.
//
function isEven(n){
if(n === 0) return true;
if(n === 1) return false;
return isEven(n-2);
}
트램폴린 형태를 사용하는 이유는 재귀적 호출이 아니기 때문에 callstack을 1로 유지할 수 있습니다.
물론 위의 함수는 트램폴린을 이해하기 위한 용도입니다.
실무환경에서는 2로 나누어 떨어지면 짝수이다. 라는 cpu 산술 명령어 하나로 계산할 수 있습니다.
(n:number) => n % 2 === 0