Community

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

재귀 함수를 만들 때는 다음과 규칙을 지키는 것이 좋다고 알려져 있다. 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 ----------

알림

알림이 없습니다