Page 172 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 172

recur 함수는 factorial 함수나 gcd 함수와 달리 함수 안에서 재귀 호출을 2회 실행합니다. 이

                   처럼 재귀 호출을 여러 회 실행하는 함수를 순수하게(genuinely) 재귀적이라 하는데 실제 동
                   작은 매우 복잡합니다. 실습 5-3의 recur 함수에 매개변수로 4를 전달하면 ‘1231412’라고
                   숫자를 한 줄에 한 글자씩 출력하는데, 이런 복잡한 구조를 가진 재귀 함수는 좀 더 전략적으
                   로 분석해야 합니다. 여기서는 recur 함수를 하향식과 상향식의 두 방법으로 분석합니다.



                   하향식 분석
                   매개변수 n으로 4를 전달하면 recur 함수는 아래 과정을 순서대로 실행합니다.



                     ① recur(3)을 실행합니다.
                     ② 4를 출력합니다.
                     ③ recur(2)를 실행합니다.



                   물론 ②에서 4를 출력하는 것은 ①의 recur(3)의 실행이 완료된 다음입니다. 따라서 recur(3)

                   을 먼저 조사해야 합니다. 말로 설명하는 것은 어렵기 때문에 아래의 그림 5-5를 예로 들어
                   설명하겠습니다. 각각의 상자는 recur 함수의 동작을 나타냅니다. 또 전달받은 값이 0 이하면
                   recur 함수는 아무 일도 하지 않으므로 빈 상자로 표시됩니다(상자 안에 ‘-’를 표기).


                                                   recur(3);   recur(2);


                                   recur(2);   recur(1);          recur(1);   recur(0);

                          recur(1);   recur(0);  recur(0);   recur(-1);  recur(0);   recur(-1);  -


                    recur(0);   recur(-1);  -  -        -     -          -


                     -           -                         1. 왼쪽 아래로 화살표를 따라 갑니다.
                                                           2. 되돌아오면 ■ 안의 값을 출력합니다.
                                                           3 오른쪽 아래로 화살표를 따라 갑니다.

                                         [그림 5-5] recur 함수의 하향식 분석


                   ①의 recur(3)의 호출 이후에 어떤 과정을 거치게 되는지는 왼쪽 화살표를 따라 가면 됩니다.
                   위 그림을 읽는 방법에 대해 설명하겠습니다. ‘왼쪽 화살표를 따라 하나 아래 상자로 이동하
                   고, 다시 원래의 상자로 돌아오면 ■ 안의 값을 출력하고 이어서 오른쪽 화살표를 따라 한 칸

                   아래 상자로 이동한다’를 일련의 작업으로 생각합니다. 이렇게 하나의 작업이 완료되어야 한
                   칸 위의 상자로 돌아갈 수 있습니다. 물론 빈 상자에 도달하는 경우 아무것도 하지 않고 돌아


                   172   C 알고리즘
   167   168   169   170   171   172   173   174   175   176   177