재귀: 어떤 문제를 해결할 때, 동일한 구조의 더 작은 문제를 해결함으로써 주어진 문제를 해결하는 방법을 재귀(recursion)라고 합니다.
재귀호출: 메서드 내에서 자기 자신을 반복적으로 호출하는 것
function arrSum(arr) {
//Base Case : 문제를 더 이상 쪼갤 수 없는 경우 (재귀의 기초)
if (arr의 길이가 0인 경우) {
return 0;
}
/*
* Recursive Case : 그렇지 않은 경우
* 문제를 더 이상 쪼갤 수 없는 경우
* head: 배열의 첫 요소
* tail: 배열의 첫 요소만 제거된 배열
*/
return head + arrSum(tail);
}
(1) 수(num)를 입력받아 1부터 num까지의 합을 리턴해야 합니다.
let output = sumTo(10)
console.log(output);//555
function sumTo(num) {
if(num === 0){
return 0
}else{
return num+sumTo(num-1)
}
}
풀이
num = 5 일 경우 // sumTo(5)
첫 if문에서 벗어난다.
그래서 return 값은 5+sumTo(4)가 된다.
sumTo(4)가 되면, return 값은 4+sumTo(3)이 된다.
sumTo(3)이 되면, return 값은 3+sumTo(2)이 된다.
sumTo(2)이 되면, return 값은 2+sumTo(1)이 된다.
sumTo(1)이 되면, return 값은 1+sumTo(0)이 된다.
sumTo(0)은 0이다.
그러므로
sumTo(1)은 1이다.
sumTo(2)는 3이다.
sumTo(3)은 6이다.
sumTo(4)은 10이다.
결과적으로 sumTo(5)은 15이다.
결론
재귀 적인 사고 !! 익숙해져야 할거 같다. 코드만 봐도 어떤식으로 재귀적으로 반복되는지 알수 있도록..