Daehyunii's Dev-blog

재귀함수 작동 원리가 궁금하다 본문

❔ Question/JavaScript

재귀함수 작동 원리가 궁금하다

Daehyunii 2022. 7. 6. 21:28

재귀함수 동작원리 설명

function countdown2(m){
    if(m === 0) return 1000;
    console.log(m);
    return countdown2(m-1);
}

//풀어서 작성해보기

function countdown(3){
    if(3 === 0) return 1000; // false 실행안됨
    console.log(3);

    return countdown(2);
        if(2 === 0) return 1000; // false 실행안됨
        console.log(2);

        return countdown(1);
            if(1 === 0) return 1000; // false 실행안됨
            console.log(1);

            return countdown(0);
                if(0 === 0) return 1000; // true 실행됨
}

//하지만 여기서 중요한것은 22문에서 반환값 1000이 그 17문의 함수로 반환되어도, 
//1000은 평가만 되지 아무런 동작이 이뤄지지 않고, 
//17문의 함수는 별도의 반환문이 없으므로 undefined가 13문으로 반환되고,
//13문의 함수에서는 17문의 함수에서 반환된 undefined가 의미가 없으므로 평가만 되고 아무런 동작이 이뤄지지 않고,
//13문의 함수가 종료될때는 새로운 undefined 반환값이 9문의 함수로 반환되고,
//9문의 함수에서는 13문에의 함수에서 반환된 undefined는 평가만 되고 아무런 동작이 이뤄지지 않고,
//9문의 함수가 종료되었을때 별도의 반환값이 없으므로 undefined가 반환된다.
//결과적으로 console.log(countdown(3))이 자바스크립트 엔진에 의해서 평가되면 undefined값으로 평가된다.
//이러한 함수들이 실행되는 사이에 console.log()명령문이 실행되어 3,2,1 반환되는 것이다.

//결론
console.log(countdown(3))
/*
3
2
1
undefined
*/

countdown(3)
/*
3
2
1
*/

팩토리얼 동작원리 설명

function factorial(n){
    if(n <= 1) return 1;
    return n * factorial(n-1); 
}

//풀어서 작성해보기

function factoriala(3){
    if(3 <= 1) return 1; // false 실행안됨
    return 3 * factoriala(2);
               if(2 <= 1) return 1; // false 실행안됨
               return 2 * factoriala(1); 
                          if(1 <= 1) return 1; // true 실행됨
}

 

한번에 전체적으로 다 생각하기에는 너무 헷갈리므로, 차근차근 하나하나 따라가는게 중요할 것 같다.