使用递归在C中找到最大的共同除数

发布于 2025-01-21 09:16:47 字数 590 浏览 0 评论 0原文

这是我的代码,当输入为 21,15 时,我得到的输出为 0 。我期望的是 3 。函数的返回值 difisor 似乎返回错误的值。

#include<stdio.h>
int divisor(int a, int b){
    //when b is 0, got the GCD
    if(b==0){
        printf("when b is 0, a=%d\n", a);  
        return a;
    }
    else{
        //recursion
        printf("the input a=%d,b=%d\n", b, a%b);
        divisor(b, a%b);
    }
    // return res;
}

int main(void){
    int a, b;
    scanf("%d,%d", &a, &b);
    int r = divisor(a, b);
    printf("%d", r);
    return 0;
}

here is my code, when the input is 21,15 I got the output is 0. what I expected is 3. the return value of the function divisor seems return a wrong value.

#include<stdio.h>
int divisor(int a, int b){
    //when b is 0, got the GCD
    if(b==0){
        printf("when b is 0, a=%d\n", a);  
        return a;
    }
    else{
        //recursion
        printf("the input a=%d,b=%d\n", b, a%b);
        divisor(b, a%b);
    }
    // return res;
}

int main(void){
    int a, b;
    scanf("%d,%d", &a, &b);
    int r = divisor(a, b);
    printf("%d", r);
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沐歌 2025-01-28 09:16:47

您可以尝试一下,但它只适用于积极的整数。

int divisor(int a, int b){
    if (a * b == 0){
        return a+b;
    }

    return divisor(b % a, a % b);
}

You can try this, but it will only work for positive integers.

int divisor(int a, int b){
    if (a * b == 0){
        return a+b;
    }

    return divisor(b % a, a % b);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文