재귀(Recursion)
- 자기 자신을 호출하는 과정/함수(A process/function that calls itself) 
- 입력값이 다른 동일한 함수를 - base case에 도달하기 전까지 호출 (Invoke the same function with a different input until you reach your base case)- Base Case: 재귀가 멈추는 조건 (Condition that recursion ends)
- Recursive Case: 재귀가 시작하는 조건(Condition that resumes recursion)- function countDown(num) { if (num <= 0) { console.error("Finish!"); return; // Base Case } console.log(num); num--; countDown(num); } countDown(10);
 
재귀함수와 콜스택(Recursive functions and CallStack)
- 재귀함수는 반복해서 함수를 콜스택에 추가 - function recursive(x) { if (x > 0) { console.log(x); recursive(x - 1); } } 💡재귀 호출의 콜스택으로 인한 추가적인 메모리 필요 💡재귀 호출의 콜스택으로 인한 추가적인 메모리 필요- 재귀 호출 운영체제의 메모리 스택에 저장되어야 하기 때문에 재귀 알고리즘은 추가적인 공간 복잡도 비용이 필요합니다. 
- 콜스택이 n만큼 호출된 경우 공간복잡도는 O(n)입니다. 
- 때에 따라서 재귀 보다 반복 루프를 활용한 해결책도 고려해야 합니다. 
- 잘못 구현된 재귀함수는 스택 오버플로우(stack overflow) 오류를 일으켜 프로그램을 중단시킬 수 있습니다. 
 
※ 재귀함수 필수 요소
- Base Case- function factorial(num) { // if(num === 1) return 1; // 👿No base case return num * factorial(num - 1); } // Maximun call stack size exceeded(Stack overflow)
- Return- function factorial(num) { if (num === 1) console.log(1); // 👿No return return num * factorial(num - 1); } function factorial(num) { if (num === 1) return 1; return num * factorial(num); // 👿Wrong return! } // Maximun call stack size exceeded(Stack overflow)
Last updated
