IT/Algorithm
[Javascript] 재귀, 스택
FreeYourMind
2022. 2. 16. 19:56
pow(x, n)
1. 반복을 통한 방법 : for loop
function pow(x, n) {
let result = 1;
for (let i = 0; i < n; i++)
result *= x;
return result;
}
2. 재귀를 통한 방법 : 작업을 단순화하고 자기 자신을 호출함
function pow(x, n) {
if(n <= 1) return x;
else return x*pow(x, n - 1);
}
function pow(x, n) {
return (n == 1) ? x : (x * pow(x, n - 1));
}
- n == 1 일 때, 재귀의 base, 명확한 결괏값을 즉시 도출
- n == 1 이 아닐 때, 재귀 작업
Execution Context
- 함수 실행에 대한 세부 정보를 담고 있는 내부 데이터 구조
- 제어 흐름의 현재 위치, 변수의 현재 값, this의 값 등
- 재귀 호출 발생 시, 현재 함수의 실행이 일시 중지 -> 현재 함수의 Execution Context는 Stack에 저장됨 -> 서브 함수 실행을 위한 새로운 Execution Context 생성 -> 서브 함수 완료 시, Stack에서 일시 중지된 함수의 Execution Context를 꺼내와서(pop) 다시 이어서 실행
=> 서브 함수 호출이 계속될 수록 Stack에 쌓이는 Execution Context가 늘어남
Linked List
- 재귀적으로 정의된 자료 구조
- 배열에 비해 삽입과 삭제에 들어가는 비용이 적게 듬
- index를 통해 요소에 접근할 수 없음 (배열에 비해 탐색에 비용이 더 많이 듬)
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
출처