최대공약수(GCD) 구하기 (재귀함수 사용)

c++ 언어 사용

 

 

 

문제 : 

최대공약수(GCD)값을 구하는 함수인 gcd를 구현하는 것으로, 아래 주어진 코드를 완성하라. 참고로, 주어진 gcd 함수의 입력 파라미터(input parameter) 중 첫번째 값이 두번째 값보다 작은 값이 입력되어 들어갈 것이다.

#include <iostream>
using namespace std;

void gcd(int &a,int &b);

int main()
{
	int a, b, tmp;
	while(1) {
		cout << "두 개의 양의 정수를 입력하세요." << endl;
		cout << "첫 번째 정수 => "; 
		cin >> a;
		cout << "두 번째 정수 => "; 
		cin >> b; 

		if(b > a) {
			tmp = a; 
			a = b; 
			b = tmp;
		}
		cout << "입력한 두 정수의 최대공약수 => ";
		gcd(a,b);
		cout << a << endl;
	}
	return 0;
}

void gcd(int &a, int &b) {
	// 구현 필요
} 

 

 

 

조건 :

1. 재귀 함수(Recursive Function)를 사용한다. 

2. 유클리트 호제법(Euclidean algorithm)을 사용한다.

 

 

 

풀이 코드 :

void gcd(int &a,int &b){ 
	if(b != 0){
		int c = b; 
		b = a % b;
		a = c;
		gcd(a, b); 
	}
}

 

 

 

실행 결과 : 

두 개의 양의 정수를 입력하세요.
첫 번째 정수 => 50
두 번째 정수 => 55
입력한 두 정수의 최대공약수 => 5