function solution(n){
function DFS(L){
if(L==0) return;
else{
console.log(L);
DFS(L-1);
}
}
DFS(n);
}
//
3
2
1
solution(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
위 두 함수의 결과가 다르게 나오는 것을 이해하기 위해 함수 스택 프레임을 알아보았다.

일반적으로 재귀 함수, 콜백 함수, 비동기 작업 시 발생하게 되는데 함수가 LIFO방식의 스택에 쌓이게 된다.
이때 지역 변수, 복귀 주소, 매개변수가 저장된다.

가장 마지막 함수까지 호출 후 복귀 주소로 이동하기 때문에 가장 나중에 저장된 데이터가 제일 먼저 인출된다.
function solution(n){
function DFS(L){
if(L==0) return;
else{
DFS(L-1);
console.log(L);
}
}
DFS(n);
}
solution(3);
//
1
2
3
위 함수로 예를 들면 호출 이후에 console.log를 작성하였으므로
DFS(3) - DFS(2) - DFS(1) 순서로 스택에 쌓이고
DFS(1) - DFS(2) - DFS(3) 순서로 인출된다.
참고 페이지 : https://www.tcpschool.com/c/c_memory_stackframe
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com