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

갑니다.



                              조금만 더!   recur(3)의 호출에 대해 더 자세히 알아볼까요?

                           예를 들어 recur(3)을 호출하면 그림 5-5 왼쪽 아래 상자의 recur(0)까지는 계속 왼쪽 화살표를 따라 가
                           기 때문에 ‘4’를 바로 출력할 수 없습니다. recur(0)의 왼쪽 화살표에서 빈 상자를 만나 recur(0)을 호
                           출한 상자로 돌아가 ‘1’을 출력하고, 이어 일련의 작업 중 하나인 recur(-1)을 호출해 다시 빈 상자를 만
                           나서 돌아오면 비로소 recur(0)을 호출한 상자에서 한 칸 위의 상자로 돌아갑니다. 차근차근 생각해보면
                           recur(3)을 호출한 상자로 돌아가기 위해 많은 단계를 거쳐야 함을 알 수 있습니다.




                        이처럼 가장 위쪽에 위치한 상자의 함수 호출부터 시작해 계단식으로 자세히 조사해 가는 분
                        석 기법을 하향식 분석(top-down analysis)이라고 합니다. 그런데 이 그림 안에는 recur(1),
                        recur(2)의 호출이 여러 번 있습니다(같은 호출이 여러 번 있습니다). 꼭대기(top)부터 분석하면
                        이렇게 같은 함수의 호출이 여러 번 나올 수 있기 때문에 ‘하향식 분석이 반드시 효율적이다’

                        라고 말할 수는 없습니다.


                        상향식 분석

                        위쪽부터 분석하는 하향식 분석과는 대조적으로 아래쪽부터 쌓아 올리며 분석하는 방법이
                        상향식 분석(bottom-up analysis)입니다. recur 함수는 n이 양수일 때만 실행하므로 먼저
                        recur(1)을 생각합니다. recur(1)이 수행하는 작업은 아래와 같습니다.


                         ① recur(0)을 실행합니다.
                         ② 1을 출력합니다.
                         ③ recur(-1)을 실행합니다.



                        여기서 ①의 recur(0)과 ③의 recur(-1)은 출력할 내용이 없습니다. 따라서 ②의 1만 출력합

                        니다. 그럼 recur(2)에 대해 생각해 봅시다.


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



                        ①의 recur(1)은 1을 출력하고 ③의 recur(0)은 출력할 내용이 없습니다. 전체 과정을 거치면






                                                                                     05•재귀 알고리즘  173
   168   169   170   171   172   173   174   175   176   177   178