알고리즘

[DFS,BFS 기초] 재귀함수

kimkim615 2025. 1. 18. 16:08

문제

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

 

입력설명

첫 번째 줄은 정수 N(3<=N<=10)이 입력된다.

 

출력설명

첫째 줄에 출력한다.

 

입력예제 1

3

 

출력예제 1

1 2 3

 


 

재귀함수는 자기가 자기 자신을 호출하는 함수

자기가 자기 자신을 호출하는것이므로 DFS(n-1) 이렇게 해주면 자기 자신을 호출해주는 것

만약에 3이 넘어가면 DFS(2)를 호출하고 또 다음에는 DFS(1)을 호출하고 계속 호출하게 된다 -> 무한반복

재귀함수는 반복문의 형태

 

무한반복이므로 종료조건을 줘야됨 if(n==0) return; -> DFS(0)은 바로 종료될 것이다

void형에서 return;하면 함수의 종료의 의미를 갖고있음

 

System.out.print(n+" "); 이 코드를 DFS(n-1) 위에다가 놓으면 3 2 1 출력이고 아래다가 놓으면 1 2 3 출력이다.

이유는 재귀함수는 스택을 사용하기 때문이다

 

+ 여기서 스택 프레임이 생김 (매개변수 정보, 지역변수 정보, 이 함수가 끝나면 복귀될 주소)

 


처음 D(3)이 작동하면 6라인까지 가서 DFS(n-1)를 만나서 올라간다 7라인부터는 실행을 안한다 그래서 D(2)가 호출이 되어서

스택 맨 상단에 D(2)가 생성된다. D(3)은 대기상태가 됨 (7,8,9라인 안함 아직) 

D(2)도 6라인까지 하고 D(1)이 호출되고 맨 상단 스택에 D(1)이 생성된다.

D(1)도 6라인까지 하고 D(0)이 호출되고 맨 상단 스택에 D(0)이 생성된다.

D(0)은 0이니까 종료되므로 9라인까지 가서 자기 할 일을 다 했다. 그러니까 스택에서 pop 된다

 

< 스택은 맨 상단이 항상 작동된다 >

 

그러면 D(0)에서 back 해서 이제 D(1)로 다시 복귀된다 그러면 n을 출력하므로 1을 출력한다

-> D(2) 2 출력 -> D(3) 3 출력

그러므로 출력 순서가 1 2 3 이렇게 된다