문제 : 자연수의 리스트를 입력으로 받아 리스트의 합을 리턴하는 함수 'arrSum'을 작성
function arrSum(arr){
let sum = 0;
for(let i=0;i<arr.arr.length;i++){
sum+= arr[i];
}
return sum;
}
[10,3,6,2]
의 합을 구한다고 생각해보자.
쪼개서 생각해보기
[10,3,6,2]
의 합을 구하는거보다 [3,6,2]
의 합을 구하는 방법을 생각해본다.[3,6,2]
에 10을 더해주면 원래 배열의 합을 구할수있다.[3,6,2]
의 합을 구하는거보다 [6,2]
의 합을 구하는방법을 생각해본다.[6,2]
에 3을 더해주면 [3,6,2]
의 합을 구할수있다.[6,2]
=> [2]
[2]
=> 2
arrSum([10, 3, 6, 2]) = 10 + arrSum([3, 6, 2]);
arrSum([3, 6, 2]) = 3 + arrSum([6, 2]);
arrSum([6, 2]) = 6 + arrSum([2]);
arrSum([2]) = 2 + arrSum([]);
arrSum([]) = 0;
이런 방법을 재귀(recursion)이라고 한다.
function arrSum(arr) {
// 재귀의 기초 (base case)
// 문제를 더 이상 쪼갤 수 없을 경우
if (arr의 길이가 0인 경우) {
return 0;
}
// recursive Case
// 그렇지 않은 경우
// head: 배열의 첫 요소
// tail: 배열의 첫 요소만 제거된 배열
return head + arrSum(tail);
}
function recursive(input1, input2, ...) {
// 재귀의 기초 (base case)
if (문제를 더 이상 쪼갤 수 없을 경우) {
return 단순한 문제의 해답;
}
// recursive Case
// 그렇지 않은 경우
return 더 작은 문제로 새롭게 정의된 문제
// 예1. someValue + recursive(input1Changed, input2Changed, ...)
// 예2. someValue * recursive(input1Changed, input2Changed, ...)
}