Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- css
- Java Script
- JavaScript
- Algorithm
- nvm
- Class
- SR
- worflow
- reactjs code snippets
- 초보 개발자
- 서버 배포
- SR완료
- Pre코스
- Node.js
- Data Structure
- 마케팅 분석
- 자바스크립트
- 코드스테이츠
- toy problem
- ERROR 2003
- 고객 세분화
- 맥북 git 에러
- RDS 오류
- first project
- html
- Date Structure
- code states
- 데이터리안
- 코드 스테이츠
- 리덕스 어려워
Archives
- Today
- Total
Nathan's 개발 일지
21년 1월 1일 TIL 본문
- 재귀함수(Recursion Function)란 함수 내에서 함수 자신을 호출하는 함수이다.
- 구조가 비슷한, 주어진 문제가 더 작은 문제로 나누어 질 수 있는 경우 사용
- 중첩된 루프가 많거나 중첩의 정도(number of loops)를 미리 알 수 없는 경우 사용
함수내에서, 자기 자신을 계속 호출하여 더이상 더 작아질 수 없는 선까지 도달한 이후에 다시 돌아가서 값을 가져온다.
학창시절에 배웠던 팩토리얼을 떠올려보자. 4!의 경우 4 * 3 * 2 * 1이고 답은 24이다. 이것을 for문으로 표현하면
let arr = [1, 2, 3, 4]
let result = 1;
function factorial(arr) {
for (let i = 0; i < arr.length; i++) {
result = result * arr[i];
}
return result;
}
이렇게 될 것이다.
재귀함수로 표현을 한다면 아래와 같다.
let arr = [1, 2, 3 ,4]
function factorial(arr) {
if (arr.length === 0) {
return 1;
}
let head = arr[0];
let tail = arr.slice(1);
return head * factorial(tail);
}
// 1번째 호출시 1 * factorial([2, 3, 4])
// 2번째 호출시 2 * factorial([3, 4])
// 3번째 호출시 3 * factorial([4])
// 4번째 호출시 4 * factorial([])
// arr.length === 0 일때 return 1 임으로 factoril([])는 1
// 더이상 쪼개질 수 없음으로 다시 4번째부터 1번째까지 돌아간다.
// 4번째 호출 4 * 1 = 4
// 3번째 호출 3 * 4 = 12
// 2번째 호출 2 * 12 = 24
// 1번째 호출 1 * 24 = 24 ---> 24 리턴.
위와 같은 예시는 간단하므로 for문으로 해결이 가능하다. 이러한 경우에는 굳이 사용하지 않아도 충분히 해결할 수 있으나
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
for (let k = 0; k < n; k++) {
for (let l = 0; l < n; l++) {
for (let m = 0; m < n; m++) {
for (let n = 0; n < n; n++) {
for (let o = 0; o < n; o++) {
for (let p = 0; p < n; p++) {
// do something
someFunc(i, j, k, l, m, n, o, p);
}
}
}
}
}
}
}
}
이와같이 중첩된 루프가 많거나 중첩의 정도(number of loops)를 미리 알 수 없는 경우는 재귀함수를 사용하는것이 효율적이고 간단하다.
스스로를 호출한다는 부분이 처음에 이해하기 어려웠지만. 하나하나씩 적어가며 하다보니 이해가 되었다. 자바스크립트의 알고리즘에 단골 문제로 나오는 재귀함수라고하니 필수적으로 개념을 이해하고 넘어가는 것이 필요하다.
'TIL(Today I Learned)' 카테고리의 다른 글
21년 1월 11일 TIL (0) | 2021.01.11 |
---|---|
코드스테이츠 PRE 코스를 마치며 (0) | 2021.01.07 |
20년 12월 25일 TIL (0) | 2020.12.25 |
20년 12월 21일 TIL (0) | 2020.12.21 |
코드스테이츠 PRE과정 2주간의 회고록 (2) | 2020.12.20 |
Comments