Daehyunii's Dev-blog
재귀함수 작동 원리가 궁금하다 본문
재귀함수 동작원리 설명
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 실행됨
}
한번에 전체적으로 다 생각하기에는 너무 헷갈리므로, 차근차근 하나하나 따라가는게 중요할 것 같다.
'❔ Question > JavaScript' 카테고리의 다른 글
var키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 된다 그렇다면 전역 변수는 결국 프로퍼티인가? (0) | 2022.07.24 |
---|---|
var vs let & const 키워드의 '초기화단계' 시점이 차이나는 이유가 궁금하다. (0) | 2022.07.23 |
객체 리터럴 프로퍼티 관련 내용이 궁금하다 (0) | 2022.07.02 |
단항 산술 연산자 관련 원리가 궁금하다 (0) | 2022.06.28 |
삼항 조건 연산자 관련 원리가 궁금하다 (0) | 2022.06.28 |