题目:
编写递归函数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 }