(알고리즘 공부를 하다가 관련 내용이 나와서 잊지 않기 위해 기록한다!)
👉 재귀함수: 함수가 자기 자신을 호출하는 행위, 동일한 코드가 계속적으로 반복수행된다.
그래서 반복수행을 멈출 수 있는 exit code가 필요하다.
만약 탈출 조건이 없다면 스택 오버플로우가 발생한다.
그렇다면 재귀함수가 실행되는 과정을 살펴보자
아래 예제는 console.log를 재귀함수 호출문 아래에서 동작하고 있다.
실행결과를 한번 예측해보자🤔
function example(num) {
if(num === 0) return; // exit code
example(num - 1);
console.log(num);// 실행결과는?
}
example(3);
그림으로 설명하자면
3이 인자로 전달되는 example 함수 호출문을 만나고 stack가장 아래에 푸쉬된다.
그 다음 console.log를 실행하지 못하고 다시 (num - 1)를 인자로 재귀함수호출이 일어난다.
3 ~ 1이 차례대로 전달되고 실행컨텍스트에 푸쉬된다.
인자가 0으로 전달됐을때 조건문을 만족시키면서 return문이 실행된다.
이때 함수 전체를 빠져나오면서 인자가 0으로 전달된 함수의 실행컨텍스트는 팝하여 제거된다.
0이 인자로 전달 된 함수가 종료되면서 제어권은 1을 인자로 받은 함수로 넘어가고 실행된다.
console.log(1)이 실행되고 마찬가지로 종료되면서 팝하여 제거된다.(2,3 실행컨텍스트도 같은 과정 반복)
console.log 의 결과는 1, 2, 3이 차례대로 나타나게 된다.
재귀함수에 대해 이렇게 까지 생각해 본 적이 없었는데
재귀함수 + 실행컨텍스트까지 다시한번 정리할 수 있는 기회였다.