배열을 입력받아 모든 요소의 합을 리턴해야 합니다.
let output = arrSum([-1, -2, 1, 3]);
console.log(output); // --> 1
const head = arr[0];
const tail = arr.slice(1);
function arrSum(arr) {
if (arr.length === 0) { // 빈 배열일 경우
return 0; // 0을 리턴한다.
}
// const [head, ...tail] = arr;
const head = arr[0]; // arr 0번째 인덱스를 변수 head에 할당하고
const tail = arr.slice(1); // arr 0번째 인덱스를 제외한 나머지 부분을 변수 tail에 할당한다.
return head + arrSum(tail); // head + arrSum(tail) => basic case가 될 때까지 반복
}
/* 입출력 예시
let output = arrSum([-1, -2, 1, 3]);
1. 빈배열이 아니므로 if문은 지나감
2. head = -1
3. tail = [-2, 1, 3]
4. 반환 : -1 + arr([-2, 1, 3])
---
5. arr([-2, 1, 3])
6. 빈배열이 아니므로 if문은 지나감
7. head = -2
8. tail = [1, 3]
9. 반환 : -2 + arr([1, 3])
---
10. arr([1, 3])
11. 빈배열이 아니므로 if문은 지나감
12. head = 1
13. tail = [3]
14. 반환 : 1 + arr([3])
---
15. arr([3])
16. 빈배열이 아니므로 if문은 지나감
17. head = 3
18. tail = []
19. 반환 : 3 + arr([])
---
20. arr([])
21. 빈배열이므로 0을 반환.
---
22. 위에 반환된 모든 숫자들을 모아보면 -1-2+1+3 = 1로 계산됨
*/
전혀 감을 못잡겠어서 레퍼런스를 보고 '아~' 싶었다. 그리고 여기서 메서드 slice를 사용하면서 이 메서드를 이런식으로 활용한다는 것을 배울 수 있었다.
뒤에나오는 문제들에서도 slice를 많이 활용하게 되었다.