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

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

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,328

댓글 0

    함께 읽은 게시물

    🍜 짜파게티가 왜 거기서 나와?

    ... 더 보기

    내가 가본 우리나라 - 지도 색칠 사이트

    ... 더 보기

    바이브 코딩 - 개발자들이 하는거


    바이브 개발 - 일반사람이 하는거


    ... 더 보기

    예상대로 OpenAI에서 GPT-5를 발표했습니다.

    ... 더 보기

    쫓아다니지 말고 대응하라

    두 카페가 있다. 두 카페 모두 점원이 주문을 받고 커피를 내리는 카페였다. 그런데, 어느 날 한 카페에서 키오스크를 도입했다. 그렇다면, 여전히 점원이 주문을 받는 카페보다 키오스크를 도입한 카페가 변화에 더 기민하게 대응하는 것일까? 그럴 수도 있고, 그렇지 않을 수도 있다. 변화에 기민하게 대응한다는 건, 변화를 빨리 도입한다는 것과는 다른 이야기이기 때문이다.

    ... 더 보기

    조회 645


    AI와의 페어 코딩은 애자일의 극의.