0

我是编程新手,只是一名学生。

我编写了一个程序来使用递归函数计算两个数字的 GCD,但它给出了一些正确的答案,而它给出了一些错误的答案。请帮助我确定问题:

#include<stdio.h>
#include<conio.h>

int gcd(int,int,int)

int main(){
    int a,b,x,val;
    printf("Enter the first number: ");
    scanf("%d",&a);
    printf("Enter the second number: ");
    scanf("%d",&b);

    if(a>b)
        x=b;
    else
        x=a;

    val=gcd(a,b,x);
    printf("The GCD of the two numbers you entered is:%d",val);
    getch();
    return 0;
}

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

例如,当第一个数字 = 69,第二个数字 = 65 时,程序给出了错误的答案,而在其他一些情况下,它神秘地给出了正确的答案。

有人可以帮我吗?

4

4 回答 4

1

检查您的代码路径。并非所有条件都在 gcd 函数中返回整数。您使用的是哪个编译器?它应该给你一个警告或错误。

于 2012-07-11T13:04:30.010 回答
1

试试这个:

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

这会在一个 if 语句中捕获与 0 的模数比较,所有不属于此 get gcd 调用的条件。

于 2012-07-11T13:11:38.610 回答
0

示例:考虑数字a=100b=44。当它达到x=25(除以 100,而不是 44)时,您的代码没有正确的路径可供选择。

您没有考虑所有条件(路径)。

int gcd(int a,int b,int x){
    if(a%x==0){
        if (b%x==0)
           return x;
        else
           // ERROR ERROR ERROR, 
           // if the code reaches here, then it neither calls gcd recursively, 
           // nor does it return anything valueable
    }else
        return gcd(a,b,x-1);
}

您应该如下更改代码。

int gcd(int a,int b,int x){        
    if(a%x==0)
        if (b%x==0)
        {
            return x;
        }
    return gcd(a,b,x-1);
}

或者

int gcd(int a,int b,int x){
    if(a%x==0 && b%x==0) return x;        
    return gcd(a,b,x-1);
}
于 2012-07-11T13:35:36.507 回答
0

C中两个数字的GCD(最简单的方法):

while(secNum != 0) {
    Temp = fNum % secNum;
    fNum = secNum;
    secNum = Temp;
}

printf("GCD of the given two numbers : %d",fNum);
于 2017-08-18T16:38:48.273 回答