Code Etc/코딩테스트

재귀함수란?

CoderHan 2023. 1. 11. 21:49
반응형

코딩테스트 문제를 풀다보면 한 번쯤 유용하게 쓸 일이 생긴다.

 

재귀함수란 함수 내에서 자기 자신을 다시 호출하는 함수이다.

코드를 살펴보자

 

function printNum(number) {
if(number === 0) return //탈출조건

printNum(number - 1);
console.log(number)
}

printNum은 전달받은 인수 number를 출력하는 함수이다.

 

함수에 있는 if문은 탈출 조건으로 재귀함수에서 필수 요소이다.

만약 탈출조건이 없거나 만족되지 않는다면 계속 본인자신을 호출해서 stack over가 될 것이다.

 

함수를 이제 실행해보자.

printNum(3)을 실행하면

printNum(3) {
if(number === 0) return
} // 1

printNum(2) {
if(number === 0) return
} // 2

printNum(1) {
if(number === 0) return
} // 3

printNum(0) {
if(number === 0) return
} // 4

이런 순서로 메모리에 쌓이게 된다.

제일 마지막에 실행되는 함수는 printNum(0)이고 탈출 조건을 만족했기 때문에 return되어 printNum(0)을 호출한

printNum(1)로 되돌아간다. 

 

그럼 출력은 언제 될까?

printNum(0) {
if(number === 0) return
} // 1

printNum(1) {
console.log(1)
} // 2

printNum(2) {
console.log(2)
} // 3

printNum(3) {
console.log(3)
} // 4

이런 순서로 다시 되돌아가며 숫자가 출력된다. 그러면 우리는 1,2,3을 순서대로 얻을 수 있다.

 

재귀함수를 다룰 때 재귀함수를 호출하는 시점을 기준으로

위에 있는 코드와 아래 있는 코드는 실행 시점이 완전히 달라진다.

이 점이 재귀함수가 갖는 큰 특징이고 유의해야 할 점이다.

 

재귀함수를 응용한 BFS,DFS 등 다양한 알고리즘이 있으니 개념을 알아두면 좋을 것 같다.

반응형