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

다음의 그림 5-4는 각 변의 길이가 22, 8인 직사각형을 예로 들어 구체적인 과정을 설명한 예

                        입니다.


                                          22
                        a
                                                                  짧은  변의  길이를  한  변으로
                           8
                                                                  하는 정사각형으로 채웁니다.
                                                             c
                                        1
                                                               6
                        b
                                                         2          6    남은 직사각형에 대해
                          8                                              같은 작업을 반복합니다.
                                                                    2
                                 8         8        6            3
                                                                         정사각형만으로 구성되었을 때의
                                                         d           2
                                                                         변의 길이가 최대공약수입니다.
                                                                  2
                                             [그림 5-4] 22와 8의 최대공약수를 구하는 과정


                        1   a 의 22 × 8 크기의 직사각형에서 짧은 변(8)을 한 변으로 하는 정사각형으로 분할합니
                        다. 이렇게 하면  b 처럼 8 × 8 크기의 정사각형 타일 2장이 생깁니다. 그리고 8 × 6 크기의

                        직사각형이 1개 남습니다.


                        2  남은 8 × 6 크기의 직사각형으로 다시 같은 과정을 수행합니다( c ). 6 × 6 크기의 정사각
                        형이 1개, 6 × 2 크기의 직사각형이 1개 남습니다.



                        3  다시 남은 6 × 2 크기의 직사각형으로 같은 과정을 수행합니다( d ). 이번에는 2 × 2 크기
                        의 정사각형 3개로 나눌 수 있습니다. 여기서 얻은 2가 최대공약수입니다.



                        이렇게 두 정수가 주어질 경우 큰 값을 작은 값으로 나누었을 때 나누어떨어지는 가장 작은 값
                        이 최대공약수입니다(과정  3 ). 나누어지지 않으면 작은 값(얻은 나머지)에 대해 나누어떨어질
                        때까지 같은 과정을 재귀적으로 반복합니다(과정  1 ,  2 ).



                        이 과정을 좀 더 수학적으로 표현하기 위해 두 정수 x, y의 최대공약수를 gcd(x, y)로 표기하
                        겠습니다. x = az와 y = bz를 만족하는 정수 a, b와 최대의 정수 z가 존재할 때 z를 gcd(x, y)

                        라고 할 수 있습니다. 다시 말해 최대공약수는 y가 0이면 x이고, y가 0이 아니면 gcd(y, x % y)




                                                                                     05•재귀 알고리즘  169
   164   165   166   167   168   169   170   171   172   173   174