GCD程序如何正确计算结果

how does gcd program calculate the result correctly

本文关键字:计算 结果 何正确 程序 GCD      更新时间:2023-10-16
    class GcdCal {
public:
    int gcd(int a,int b){
        if(a<b){
            int temp =a;
            a = b;
            b = temp;
        }
        int r = a%b;
        if(r == 0){
            cout<< b;
        }else{
            //cout<< b<< "   "<< r<<" *** ";
            gcd(b,r);
        }
        return b;
    }
};
int main() {
    int a= 44;
    int b= 16;
    GcdCal numberTest;
    int result = numberTest.gcd(a,b);
    cout<< result;
    cout<<"gcd is "<<result;
}

我是C++的新人,我只是想用C++计算gcd,但是程序输出的结果错误,而不是4但16,有时甚至是0,我不知道哪里出了问题。

我认为您在尝试返回结果和打印结果时感到有些困惑。
这个函数应该返回一个值,你需要记住返回递归的结果,否则它消失在天空中的大比特桶中。

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

或者,更短:

int gcd(int a, int b){
    if (a < b){
        return gcd(b, a);
    }
    int r = a % b;
    return r == 0 ? b : gcd(b, r);
}

(作为旁注,将该函数放在类中是没有意义的。

递归实现不正确。它返回第一次迭代的结果,但应返回最后一次迭代。取代

if(r == 0){
    cout<< b;
}else{
    //cout<< b<< "   "<< r<<" *** ";
    gcd(b,r);
}
return b;

if(r == 0){
    cout<< b;
    return b;
}else{
    //cout<< b<< "   "<< r<<" *** ";
    return gcd(b,r);
}