📜  gcd 递归 c++ (1)

📅  最后修改于: 2023-12-03 15:30:52.971000             🧑  作者: Mango

递归求 GCD(最大公约数)

在算法中,GCD(最大公约数)是最基础的数学问题。它是指两个或多个整数的最大公因数,即他们共有的约数中最大的一个。本文将用 C++ 来演示一种递归方法来求两个数的最大公约数。

嵌套函数法

首先,我们可以定义一个 gcd 函数,该函数接收两个整数作为参数 ab。该函数应首先确定 ab 中较小的那一个,然后使用一个循环或递归来查找从 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;
}
递归法

还有一种更基本的方法是,在一个函数中递归调用该函数本身来查找 ab 的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;
}
结果

无论是嵌套函数或递归函数都可以计算 ab 的GCD,我们得到输出结果:

GCD of 12 and 18 is 6
结论

递归函数为编写最简单,理解最直接,容易看懂。虽然嵌套函数的代码量略少,但递归方法更易于使用,因此也更受欢迎,本文仅仅演示了如何使用递归算法计算GCD。