📌 재귀 함수 (recursive function)
: 함수 내에서 스스로를 호출하는 함수
❓ 재귀함수 언제 사용할까
1. 반복문의 중첩이 많거나, 반복문의 중첩이 예측 불가능할 때
2. 반복문을 간결하게 적고 싶을 때
3. 함수에서 해야할 일을 작게 나눌 수 있을 때
📝 재귀함수 만드는 순서
1. 함수의 인자와 리턴하는 값을 생각해본다.
ex) 정수가 들어있는 배열을 받아서 배열의 요소를 다 더한 값을 반환해야 할 때
recursive([number]) => number
2. 문제를 쪼갠다.
: 입력값과 실행 순서를 기반으로 반복되는 부분을 나누어 본다.
ex) 정수가 들어있는 배열 받아서 배열의 요소를 다 더한 값 반환
=> 배열[0] + 배열[1]부터 끝까지 더한 값
=> 배열[0] + 배열[1] + 배열[2]부터 끝까지 더한 값
3. 재귀 탈출구를 만든다.
: 재귀에서 목적값에 달성하면 끝낼 수 있는 탈출구를 만들어 둔다.
목적값에 달성했을 때의 값이나, 한번 루프를 돌 때마다 바뀌는 값이 좋다.
ex) 배열 요소 다 더할 때 재귀 함수의 인자인 배열의 길이는 점점 짧아진다.
=> 배열의 길이가 0이 되면 끝내자!
4. Base Case 생각하기
: 배열의 길이가 0인 배열의 요소를 다 더한다면 0이 나온다는 걸 쉽게 알 수 있다.
재귀를 사용할 필요 없이 바로 답을 알 수 있는 경우를 Base Case(재귀의 기초)라고 한다.
이때 Base Case는 재귀함수의 가장 작은 문제여야 한다.
5. Recursive Case 생각하기
: 재귀를 사용해야 알 수 있는 문제, Base Case에 도달해야 풀리는 문제를 Recursive Case라고 한다.
Recursive Case는 리턴문에 현재 위치한 함수를 호출하는 형식으로 작성한다.
function sumAll(arr) {
if(arr.length === 0) {
return 0;
}
return arr[0] + sumAll(arr.slice(1));
}
'Codestates SEB FE 42기 > 정리노트' 카테고리의 다른 글
S3 unit2 | UI/UX는 뭘까? UI/UX 정의와 비교 (0) | 2022.12.20 |
---|---|
S3 unit1 | JSON.stringify 와 JSON.parse 사용 방법과 정의 (0) | 2022.12.18 |
S2 unit10 | Express vs Node.js 서버 제작 방법, 미들웨어란? (0) | 2022.12.15 |
S2 unit10 | web server : SOP, CORS (0) | 2022.12.14 |
S2 unit9 | 컴포넌트 내에서의 AJAX요청 (0) | 2022.12.09 |