본문 바로가기

알고리즘 정리

기본 재귀함수

Q.자연수 N이 입력되면 재귀함수를 이용하여 1부터 N까지 출력하는 프로그램 작성

 

A:

function solution(n) {
   function DFS(L) {
     if (L === 0) return;
     else {
       console.log(L);
       DFS(L - 1);
     }
   }
   DFS(n);
 }

 solution(3); //3,2,1

이렇게 호출을 하게 되면 3,2,1이라는 답이 반환된다. 그럼 어떻게 1,2,3으로 반환을 할까

function solution(n) {
  function DFS(L) {
    if (L === 0) return;
    else {
      DFS(L - 1);  //위 아래 위치 변경
      console.log(L);
    }
  }

  DFS(n);
}

solution(3); //1,2,3

위의 결과 그림으로 설명

함수는 호출이 되면 stack frame에 쌓이게 된다.

그러면 먼저 3을 호출받은 DFS(3)이 12번줄(vscode에서는 12번째 줄에 위치)에서 다시 DFS(2)가 호출되고 그 자리에서 대기가 된다.

이런 방법으로 쭉 stack에 쌓이면 파란색과 같은 모습으로 보일 수 있는데

여기서 return이 시작되면 맨 위에꺼 부터 pop되기 시작한다.

그래서 DFS(1)부터 시작하면 대기하고 있던 12번째줄 부터 시작을 하고 바로 밑에 console.log(L)이 실행되면 1,2,3과 같은 호출결과를 볼 수 있다.

 ** 간단하지만 꼭 알아 두어야 할 재귀함수 이론이므로 기록함. 

'알고리즘 정리' 카테고리의 다른 글

DFS(깊이우선탐색)  (0) 2023.06.02
이진트리 순회(깊이우선탐색)  (0) 2023.05.25
Queue 자료구조  (0) 2023.05.02
스택자료구조 사용한 후위식  (0) 2023.05.01
해쉬 알고리즘  (1) 2023.04.20