📅  最后修改于: 2023-12-03 15:30:52.971000             🧑  作者: Mango
在算法中,GCD(最大公约数)是最基础的数学问题。它是指两个或多个整数的最大公因数,即他们共有的约数中最大的一个。本文将用 C++ 来演示一种递归方法来求两个数的最大公约数。
首先,我们可以定义一个 gcd
函数,该函数接收两个整数作为参数 a
和 b
。该函数应首先确定 a
和 b
中较小的那一个,然后使用一个循环或递归来查找从 2 到更小数字的所有可能因子。
// 递归求 GCD
#include <iostream>
using namespace std;
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
int main() {
int a = 12, b = 18;
cout << "GCD of " << a << " and " << b << " is " << gcd(a, b) << endl;
return 0;
}
还有一种更基本的方法是,在一个函数中递归调用该函数本身来查找 a
和 b
的GCD。在这里我们也可以使用类似的方法。任何时间,如果其中一个数字为零,则我们将返回相反的数字作为GCD。
// 递归求 GCD
#include <iostream>
using namespace std;
int gcd(int a, int b) {
if (a == 0) {
return b;
} else if (b == 0) {
return a;
} else if (a > b) {
return gcd(a - b, b);
} else {
return gcd(a, b - a);
}
}
int main() {
int a = 12, b = 18;
cout << "GCD of " << a << " and " << b << " is " << gcd(a, b) << endl;
return 0;
}
无论是嵌套函数或递归函数都可以计算 a
和 b
的GCD,我们得到输出结果:
GCD of 12 and 18 is 6
递归函数为编写最简单,理解最直接,容易看懂。虽然嵌套函数的代码量略少,但递归方法更易于使用,因此也更受欢迎,本文仅仅演示了如何使用递归算法计算GCD。