728x90
반응형
알고리즘을 풀다보면 항상 나를 괴롭혔던 재귀함수! 이제는 정말 쉽게 풀어보고 싶은 마음에 재귀함수 문제를 연습하다가 스택 프레임에 대해 여지까지 제대로 알지 못했다는 내 자신을 발견하고 정리를 해두려고 한다.
스택 프레임(Stack Frame)
- 스택 영역: 함수의 호출과 관계되는 지역 변수, 매개 변수가 저장되는 영역이다. 함수가 호출되면서 할당되고, 함수가 종료되면 소멸된다.
- 스택 프레임: 함수가 호출되면 스택에 함수의 지역 변수, 매개 변수, 복귀 주소 등이 입력된다. 스택 영역에 저장되는 함수의 정보가 스택 프레임이다.
728x90
예제
간단한 재귀함수를 이용한 예제를 가져왔다.
function solution(n) {
function DFS(L) {
if (L === 0) return;
else {
DFS(L - 1);
console.log(L);
}
}
DFS(n);
}
solution(3); // 1 2 3
function solution(n) {
function DFS(L) {
if (L === 0) return;
else {
console.log(L);
DFS(L - 1);
}
}
DFS(n);
}
solution(3); // 3 2 1
위의 예제의 다른 점은 console.log(L)의 위치다. 즉, 재귀함수를 호출한 후와 호출하기 전 위치에 따라 출력 결과가 다른 것을 확인할 수 있다.
반응형
그 이유는 재귀함수는 호출될 때마다 스택 영역에 스택 프레임을 저장하고, 스택 프레임에 저장된 복귀 주소를 기억해 두기 떄문이다.
다시 말해, 첫 번째 예제를 보면 DFS(3)은 DFS(2)를 호출하게 되는데 이때 다시 돌아올 주소를 기억해두는 것이다.
728x90
반응형
'JavaScript' 카테고리의 다른 글
협업을 위한 .prettierrc 파일 만들기 (0) | 2023.02.06 |
---|---|
[자바스크립트-배열] 모든 값을 0으로 가지는 배열 만들기 (0) | 2023.02.03 |
Airbnb 컨벤션에 따라 ESLint 설정하기 (0) | 2023.02.02 |
[자바스크립트-객체] 객체 키를 동적으로 할당하는 법(computed property) (1) | 2023.02.01 |
[자바스크립트-객체] 객체의 값을 기반으로 키를 정렬하는 법 (0) | 2023.01.31 |
댓글