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