♾️재귀 함수와 트램펄린 구조

재귀 함수를 만들 때는 다음과 규칙을 지키는 것이 좋다고 알려져 있다.

1 언제 멈출지 알아야 한다.

2 문제를 더 작은 문제나 한 단계로 풀 수 있는 문제로 작게 분리한다.

3 한 단계에서 무엇을 실행할지 결정한다.


🪄트램펄린 구조

자바스크립트는 너무 많은 재귀 호출이 이루어지면 쉽게 스택 깨짐이 발생한다.

이것을 방지하기 위해서는 트램펄린 구조를 이용해 스택 깨짐을 피할 수 있다.


----------

// 🔓스택 깨짐 발생 코드

const isEven = n => n === 0 ?

true :

isOdd(Math.abs(n) - 1)

const isOdd = n => n === 0 ?

false :

isEven(Math.abs(n) - 1)

isEven(100000)

// Uncaught RangeError: Maximum call stack size exceeded

----------


----------

//🔒트램펄린 적용 코드

const isEven = n => n === 0 ?

true :

() => isOdd(Math.abs(n) - 1) // 함수로 변경

const isOdd = n => n === 0 ?

false :

() => isEven(Math.abs(n) - 1) // 함수로 변경

const trampoline = (fun, arg) => {

let result = fun(arg)

while (typeof result === "function") {

result = result()

}

return result

}

trampoline(isEven, 100000) // true

----------

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 2월 5일 오전 6:47

 • 

저장 2조회 1,317

댓글 0