Page 170 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 170
로 구합니다. 이 알고리즘을 유클리드 호제법(Euclidean method of mutual division)이라고 합
니다. 다음의 실습 5-2는 유클리드 호제법에 의해 두 정수의 최대공약수를 구하는 프로그램
입니다.
실습 5-2 •완성 파일 chap05/euclid.c
01 /* 유클리드 호제법에 의해 최대공약수를 구합니다. */ 실행 결과
02 #include <stdio.h>
두 정수의 최대공약수를 구합
03
니다.
04 /*--- 정수 x, y의 최대공약수를 반환 ---*/ 정수를 입력하세요 : 22
05 int gcd(int x, int y) 정수를 입력하세요 : 8
06 { 최대공약수는 2입니다.
07 if(y == 0)
08 return x;
09 else
10 return gcd(y, x % y);
11 }
12
13 int main(void)
14 {
15 int x, y;
16 puts("두 정수의 최대공약수를 구합니다.");
17 printf("정수를 입력하세요 : ");
18 scanf("%d", &x);
19 printf("정수를 입력하세요 : ");
20 scanf("%d", &y);
21 printf("최대공약수는 %d입니다.\n", gcd(x, y));
22
23 return 0;
24 }
Q1 재귀 함수 호출을 사용하지 않고 factorial 함수를 작성하세요.
연습
문제
Q2 재귀 함수 호출을 사용하지 않고 gcd 함수를 작성하세요.
Q3 배열 a의 모든 요소의 최대공약수를 구하는 다음 함수를 작성하세요.
int gcd_array(const int a[], int n);
170 C 알고리즘