Codestates SEB FE 42기/정리노트

S3 unit1 | [javascript] 재귀 함수

2realzoo 2022. 12. 17. 14:35

📌 재귀 함수 (recursive function)

: 함수 내에서 스스로를 호출하는 함수

 

❓ 재귀함수 언제 사용할까

1. 반복문의 중첩이 많거나, 반복문의 중첩이 예측 불가능할 때

2. 반복문을 간결하게 적고 싶을 때

3. 함수에서 해야할 일을 작게 나눌 수 있을 때

 

 

📝 재귀함수 만드는 순서

1. 함수의 인자와 리턴하는 값을 생각해본다.

ex) 정수가 들어있는 배열을 받아서 배열의 요소를 다 더한 값을 반환해야 할 때

recursive([number]) => number

 

2. 문제를 쪼갠다.

: 입력값과 실행 순서를 기반으로 반복되는 부분을 나누어 본다.

ex) 정수가 들어있는 배열 받아서 배열의 요소를 다 더한 값 반환

=> 배열[0] + 배열[1]부터 끝까지 더한 값

=> 배열[0] + 배열[1] + 배열[2]부터 끝까지 더한 값

 

3. 재귀 탈출구를 만든다.

: 재귀에서 목적값에 달성하면 끝낼 수 있는 탈출구를 만들어 둔다.

목적값에 달성했을 때의 값이나, 한번 루프를 돌 때마다 바뀌는 값이 좋다.

ex) 배열 요소 다 더할 때 재귀 함수의 인자인 배열의 길이는 점점 짧아진다.

=> 배열의 길이가 0이 되면 끝내자!

 

4. Base Case 생각하기

: 배열의 길이가 0인 배열의 요소를 다 더한다면 0이 나온다는 걸 쉽게 알 수 있다.

재귀를 사용할 필요 없이 바로 답을 알 수 있는 경우를 Base Case(재귀의 기초)라고 한다.

이때 Base Case는 재귀함수의 가장 작은 문제여야 한다. 

 

5. Recursive Case 생각하기

: 재귀를 사용해야 알 수 있는 문제, Base Case에 도달해야 풀리는 문제를 Recursive Case라고 한다.

Recursive Case는 리턴문에 현재 위치한 함수를 호출하는 형식으로 작성한다.

 

 

function sumAll(arr) {
    if(arr.length === 0) {
        return 0;
    }
    return arr[0] + sumAll(arr.slice(1));
}