(n === 0)
은 재귀함수의 탈출조건으로, 반드시 탈출조건이 존재해야 무한 방복을 방지할 수 있다,function fa(n) {
if(n === 0) {
return 1;
}
return n * fac(n-1);
}
function take(num. arr) {
if (num === 0 || arr.length === 0) {
return [];
}
const head = arr[0];
const tail = arr.slice(1);
return [head].concat(take(num-1, tail));
function getElementByClassName(root, className) {
let result = [];
if(root.classList.contains(className)) {
result.push(root);
}
for(let i = 0; i < root.children.length; i++) }
let child = root.children[i];
result = result.concat(getElementByClassName(child, className));
}
return result;
}
→ 재귀함수를 사용하면, 코드가 보다 간결해지고 가독성이 좋다는 장점이 있다.
1. 주어진 문제의 로직이 비슷하고 더 작은 단위로 나눌 수 있는 경우
2. 중첩된 루프가 많거나 중첩의 정도를 미리 알수 없는 경우(몇 번을 반복해야하느지 알 수 없는 경우)
→ 따라서 문제에 맞게 재귀함수 혹은 반복문을 적절히 선택해 활용해야 한다.
함수를 재귀적으로 너무 많이 호출하게 되면 콜스택이 계속 쌓이면서 더이상 기록할 공간이 없어지게 된다.
⇒ 결과적으로 프로그램 중단이 되거나, 에러가 뜨기도 한다.
※ 에러코드 Stack Overflow Error
: 콜스택이 너무 많이 쌓여 한계점에 도달했을 때 뜨는 에러
💡
규칙은 다음과 같다.
- A 함수를 호출되고 → Call Stack에 A가 쌓인다.
- A 함수 처리 중 다른 함수 B가 호출되면 → Call Stack A 호출 위에 쌓이고 → B 함수 처리를 수행한다.
- B함수 처리가 종료되면 → B함수는 Call stack에서 제거되고 → 아래 쌓여있던 A함수가 처리된다.
→ Call Stack의 이 개념은 push, pop 개념과 동일하다.
Stack Overflow Error
가 발생하기도 한다.출처 : 여기