gcd程序如何正确计算结果

时间:2016-04-25 13:20:29

标签: c++

    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,我不知道哪里出错了。

2 个答案:

答案 0 :(得分:1)

我认为你在尝试返回结果并打印出来时会感到有点困惑 这个函数应该返回一个值,你需要记住返回递归的结果,否则它会消失在天空中的伟大bitbucket中。

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);
}

(作为旁注,将该功能放入课堂是没有意义的。)

答案 1 :(得分:0)

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

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);
}