Рекурсивные методы вычисления наибольшего общего делителя (НОД) в C++

«НОД-рекурсия c++» на английском языке означает поиск наибольшего общего делителя (НОД) с использованием рекурсии в языке программирования C++. Вот несколько способов сделать это:

Метод 1: алгоритм Евклида (рекурсивный подход)

int gcd(int a, int b) {
    if (b == 0)
        return a;
    else
        return gcd(b, a % b);
}

Этот метод использует алгоритм Евклида для рекурсивного нахождения НОД двух чисел. Он многократно делит большее число на меньшее, пока остаток не станет нулевым, после чего меньшее число является НОД.

Метод 2: алгоритм двоичного НОД (рекурсивный подход)

int gcd(int a, int b) {
    if (a == 0)
        return b;
    if (b == 0)
        return a;
    if ((a & 1) == 0 && (b & 1) == 0)
        return gcd(a >> 1, b >> 1) << 1;
    else if ((a & 1) == 0)
        return gcd(a >> 1, b);
    else if ((b & 1) == 0)
        return gcd(a, b >> 1);
    else if (a > b)
        return gcd((a - b) >> 1, b);
    else
        return gcd(a, (b - a) >> 1);
}

Этот метод использует алгоритм двоичного НОД для рекурсивного нахождения НОД двух чисел. Он использует побитовые операции для эффективного деления чисел на 2 и обработки особых случаев.

Метод 3: грубая сила (рекурсивный подход)

int gcd(int a, int b, int divisor) {
    if (divisor == 1)
        return 1;
    if (a % divisor == 0 && b % divisor == 0)
        return divisor;
    else
        return gcd(a, b, divisor - 1);
}
int gcd(int a, int b) {
    int divisor = min(a, b);
    return gcd(a, b, divisor);
}

Этот метод использует метод грубой силы для рекурсивного нахождения НОД двух чисел. Он начинается с максимально возможного делителя и проверяет, делятся ли на него оба числа. Если общий делитель найден, он возвращается. В противном случае алгоритм уменьшает делитель и повторяет процесс.