题目描述
给定两个正整数,求他俩的最大公约数;
要求使用递归,实现辗转相除法
输入描述
两个整数a,b;1<=a,b<=100000000
输出描述
最大公约数
样例输入
6 12
样例输出
6
思路分析:
难点在于辗转相除法,又称欧几里得算法。
步骤:
用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
代码如下:
#include <iostream>
int GCD(int a, int b) {
int min = a < b ? a : b;
int max = a > b ? a : b;
int c = max % min;
if (c == 0)
return min;
else
return GCD(c, min);
}
int main() {
int a, b;
std::cin >> a >> b;
std::cout << GCD(a, b);
return 0;
}