재귀함수를 꼬리물기 최적화 재귀함수로 변경한다.
why.
현시점에서 재귀함수는 스택오버플로우를 발생하기 때문에 꼬리물기 최적화 재귀함수로 변경한다.
그다음
꼬리물기 최적화된 재귀함수는 언제든지 while 문으로 변경할수 있다.
샘플 예제를 확인해보자
꼬리물기 최적화가 안된 재귀함수 ( 이유 : 연산자 + 때문에 스택 해제를 하지 못한다.)
const sum = (v) => {
return v > 0 ? v + sum(v-1) : 0;
};
console.log(sum(5));
console.log(sum(5000000));
꼬리물기 최적화 된 재귀함수(크롬에서는 아직까지 꼬리물기 최적화 지원이 안된다.)
const sum2 = (v, hab=0) => {
hab += v;
return v > 0 ? sum2(v-1, hab) : hab;
};
console.log(sum2(5));
console.log(sum2(5000000));
위 코드를 while 문으로 바꿔본다 (기계적으로 바꿀수 있다)
const sum3 = (v) => {
let hab = 0;
while(v > 0) {
hab += v;
v--;
}
return hab;
};
console.log(sum2(5));
console.log(sum3(5000000))
참고 13분경
https://www.youtube.com/watch?v=I5BZ7E6xIQ4&list=PLBA53uNlbf-vuKTARH6Ka7a_Jp0OVT_AY&index=9
'프로그래밍 > Js' 카테고리의 다른 글
vue options API vuex Store modules 사용법 (0) | 2023.04.13 |
---|---|
vue3 options API 사용시 watch 사용법 (0) | 2023.04.12 |
ES6 클래스의 메소드를 함수호출하는 방법 (0) | 2023.03.31 |
html table 을 엑셀로 출력하기 (0) | 2023.03.30 |
ES6 부동소수점 계산 라이브러리 (0) | 2023.03.29 |