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,我不知道哪里出错了。
答案 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);
}