首页 > 解决方案 > 谁能解释这个递归函数我不明白它是如何返回任何东西的?

问题描述

我不明白这个递归函数它是如何计算gcd的,有人可以详细解释一下这个递归函数如何返回gcd吗?

#include <stdio.h>

long gcd(long, long);

int main() {
    long x, y, hcf, lcm;

    printf("Enter two integers\n");
    scanf("%ld%ld", &x, &y);

    hcf = gcd(x, y);
    lcm = (x*y)/hcf;

    printf("Greatest common divisor of %ld and %ld = %ld\n", x, y, hcf);
    printf("Least common multiple of %ld and %ld = %ld\n", x, y, lcm);

    return 0;
}

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

标签: crecursion

解决方案


您可以在此处阅读有关此算法的信息:欧几里得算法

基本上,如果

a == bq + r

除以(so )r的余数是什么时候ab0 <= r < b

然后

gcd(a, b) == gcd(b, r)

请注意,这a%b就是余数,r。因此,您可以使用递归来计算gcd(a, b)

什么时候r == 0,就是那个a == bq,或者那个ba。因此,b是 的最大公约数a, b,也是原件 的最大公约数a, b。此时递归调用将保持basa0as b,因此它返回a

希望这个解释涵盖一切


推荐阅读