프로그래밍/Js

재귀함수 (꼬리물기 최적화) 샘플

소행성왕자 2023. 4. 4. 09:42

재귀함수를 꼬리물기 최적화 재귀함수로 변경한다.

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