谁能解释这个递归函数,我不明白它如何返回任何东西?

时间:2018-12-04 09:31:54

标签: c recursion

我不了解此递归函数如何计算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);
    }
}

2 个答案:

答案 0 :(得分:1)

您可以在此处了解有关此算法的信息:Euclidean algorithm

基本上,如果

a == bq + r

如果ra除以b的余数(所以0 <= r < b

然后

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

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

r == 0时,表示a == bqb除以a。 因此,ba, b的最大公约数,也适用于原稿a, b。此时,递归调用将b保留为a,将0保留为b,因此它返回a

希望此说明涵盖所有内容

答案 1 :(得分:0)

可视化...

// ...
long gcd(long a, long b) {
    fprintf(stderr, "INFO: called gcd(%ld, %ld)\n", a, b); // visualization
    if (b == 0) {
// ...