스택 프레임(stack frame)
메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다. 이러한 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있다.
| DFS(0) |
| DFS(1) ↑ |
| DFS(2) ↑ |
| DFS(3) ↑ |
DFS(3)은 line 8까지 진행하고 바로 DFS(2)를 호출한다.
DFS(0)까지 진행하고 return되고 종료된다.
| DFS(0) ↓ |
| DFS(1) ↓ |
| DFS(2) ↓ |
| DFS(3) |
DFS(0)은 자기 할 일을 다하고 pop된다. 스택의 상단이 작동한다고 이해하면 편하다.
이후 DFS(1)이 작동하면 line 8 이후가 진행되고 pop된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public static void DFS(int n) {
if(n == 0) {
return;
} else {
DFS(n - 1);// line 8
System.out.print(n + " ");// DFS(n - 1)위로 가면 3 2 1로 찍힌다.
}
}
public static void main(String[] args) {
DFS(3);
}
|
cs |
출처 : 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비