재귀는
"원래의 자리로 되돌아가거나 되돌아옴" 이라는 뜻을 가지고 있다.
재귀 함수란
함수 내부에서 자신을 호출하고 있는 함수를 말한다.
예시
function app(){
console.log('하이')
app()
}
재귀 함수를 만들어 보았다.
그리고 콘솔에 호출해보았다
멈,,,멈춰줘,,, 무한으로 하이가 출력되는 것을 볼 수 있다.
그렇다 재귀 함수는 내부에서 자기 자신을 호출하기 때문에 무한루프에 빠지게 되는 것이다.
그래서 재귀 함수를 사용하게 되면 꼭 탈출 조건을 만들어야한다.
재귀 함수를 사용하는 경우를 알아보자
위의 두가지 경우에 사용한다고 한다.
예를 들자면 전달인자로 배열을 받는 함수가 있고 이 배열의 합을 리턴하는 함수를 작성해야할때
arr = [1,2,3,4]
arrSum(arr)arrSum 함수 인자로 배열이 주어진다면 합인 10 을 리턴하는 함수를 구현해야한다.
작은 단위로 하나씩 쪼개보자
결국 1+2+3+4+5 인 것이다.
1 + [2,3,4]
2 +[3,4]
3+[4]
4+[] // 가장 작은 단위로 쪼갬
다 쪼개 놓고 보니 규칙이 존재하는 것을 볼 수 있다.
배열의 첫번째 요소를
pop()
으로 빼고 남은 배열을 다시arrSum(arr)
으로 넣어 재귀 함수를 구현하기
위 와 같이 문제를 가장 작은 단위로 쪼개는 것을 recursive case 라고 한다.
더이상 문제를 쪼갤 수 없는 경우인 []
빈배열만 남은 경우 를 탈출조건으로 만들어서 재귀 함수의 무한루프를 탈출하자.
탈출 조건을 재귀의 기초(base case) 라고 한다.
코드로 정리해보면
arr = [1,2,3,4]
function arrSum(arr){
// 빈 배열이면 0을 리턴
if(arr.length === 0){
return 0
}
return arr.shift() + arrSum(arr)
base case
는 배열의 길이가 0이면 0을 리턴하는 것이다.
recursive case
는 위 코드에서 마지막 리턴문이 될 수 있겠다.
모든 재귀 함수는 반복문으로 표현할 수 있다. 그러나 재귀 함수를 적용할 수 있는 대부분의 경우에는, 반복문보다 재귀 함수를 적용한 코드가 더욱 간결하고 이해하기 쉽다.
백틱을 사용해서 문자열을 구성
${}
안에는 값
또는 식
이 올 수 있다고 한다.console.log(`${ [1,2,3,"안뇽"] }`);
console.log(`${ {a:1, b:2} }`);
console.log(`${ function(){ return 1 } }`); // 정의만 할 경우
console.log(`${ (function(){ return 1;})() }` + 1); // 호출 후 +1
${}
'1,2,3,안뇽'