재귀는 특히 아래와 같은 상황에서 매우 적합합니다.

  1. 주어진 문제가 (구조는 비슷하고) 더 작은 문제로 나뉘어 질 수 있는 경우
  2. 중첩된 루프가 많거나 중첩의 정도(number of loops)를 미리 알 수 없는 경우
for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
        for (let k = 0; k < n; k++) {
            for (let l = 0; l < n; l++) {
                for (let m = 0; m < n; m++) {
                    for (let n = 0; n < n; n++) {
                        for (let o = 0; o < n; o++) {
                            for (let p = 0; p < n; p++) {
                                // do something
                                someFunc(i, j, k, l, m, n, o, p);
                           }
                        }
                    }
                }
            }
        }
    }
 }

사실 모든 재귀 함수는 재귀 호출 없이 while / for loop으로 표현이 가능합니다. 하지만 재귀를 사용 가능한 경우, 재귀를 사용한 코드가 대부분의 경우 더욱 간결하고, 일부의 경우에는 이해하기도 쉽습니다. 하노이의 탑과 조합(combination) 문제를 재귀와 그렇지 않은 경우로 비교해 보세요.

이 밖에도 재귀는 알고리즘 문제의 많은 부분을 차지합니다. 나중에 학습하게 될 자료구조와 알고리즘 스프린트에서, 그리고 기업의 입사 시험(알고리즘 테스트)에서 활용될 수 있기 때문에 기초를 확실하게 다져야 합니다.