재귀란?
어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 그 문제를 해결하는 방법
재귀적으로 사고하는 방법?
-잘게 쪼개서 사고하는 법
-재귀적 사고
-함수 자신의 재귀적 호출
-탈출 조건
재귀함수?
-재귀적 사고 연습을 위해 base case(쪼갤 수 없는 경우)와 recursive case(그 외의 경우)를 나눠서 작성할 수 있다.
-base case(쪼갤 수 없는 경우)는 재귀 함수 구현 시 재귀의 탈출 조건(재귀 호출이 멈추는 조건)을 구성하게 됩니다.
-recursive case(그 외의 경우)는 예로 배열이 있을때 배열의 첫요소를 head로, 배열의 첫 요소만 제거된 배열을 tail로 만들어 입력되는 배열을 head+arrSum(tail)로 해결할 수 있다.
재귀함수를 풀면서 유용한 메서드
slice()
slice는 어떤 배열의 시작부터 끝까지 얕은 복사를 하여 새로운 배열을 반환하고 원본은 바뀌지 않는다.
let arr = [1,2,3]
arr.slice(1) // [2,3] -> 배열 첫번재 요소 빼고 나머지 배열 출력
arr.slice(-1) // [3] -> 배열 마지막 요소 출력
arr.slice(0, -1) // [1,2] -> 배열 마지막 요소만 빼고 출력
재귀함수를 풀때 head와 tail을 나눌때 slice를 사용하면 좋다.
concat
concat()는 인자로 주어진 배열이나 값을 기존의 배열에 합쳐서 새 배열을 반환한다. 원본 배열은 변경되지 않는다.
let arr = [1,2,3]
const head = arr.slice(-1) // [3]
const tail = arr.slice(0,-1)// [1,2]
tail.concat(head) // [3,1,2]