18. 最大公约数算法

题目:

编写递归函数GCD(x,y),计算最大公约数。测试你的代码。

思路:

最大公约数的数学原理暂时略去不谈,只按照算法讲解代码思路。该算法计算两个数的最大公约数,函数需要两个参数,返回值是它们的最大公约数。现在有两个数 10 和 5, 传入函数,发现两个数都不为 0, 于是进行递归,将后面的数(这里是 5 )放到第一个参数位,将前面的数对后面的数取余得到的结果(这里是 10 % 5,结果是 0)放到第二个参数位,发现有一个参数是 0, 那么返回第一个参数(这里是 5 ),计算完毕。

上面是第一个参数大于等于第二个参数的情况。当第一个参数小于第二个参数时,我们并不需要手动交换它们。例如:现在有两个数 5 和 10, 传入函数,发现两个数都不为 0 ,于是进行递归,将后面的数(这里是 10)放到第一个参数位,将前面的数对后面的数取余得到的结果(这里是 5 % 10 ,结果是 5)放到第二个参数位,我们发现它与上面的情况一样了。这里便是自动交换了两个参数,使大的在前,小的在后。

代码:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int GCD(int x, int y) {
 5     if (0 == y) {
 6         return x;
 7     } else {
 8         return GCD(y, x % y);
 9     }
10 }
11 
12 int main() {
13     cout << "Enter two num : ";
14     int a, b, gcd;
15     while (cin >> a >> b) {
16         gcd = GCD(a, b);
17         cout << "GCD : " << gcd << endl;
18     }
19 
20     return 0;
21 }
原文地址:https://www.cnblogs.com/Hello-Nolan/p/12336934.html