GCD程序如何正确计算结果
how does gcd program calculate the result correctly
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);
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 我们如何并行运行算法的 n 个实例并以有效的方式计算结果函数的平均值?
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- WebGL2 和 C++ 上的浮点计算结果不同
- 术语的计算结果不是采用0个参数的函数
- 错误 C2064:术语的计算结果不是采用 3 个参数的函数
- 在C++中,是否可以编写一个条件的lambda,即只是一个计算结果为真或假的条件
- C++ 函数指针的计算结果为 1
- 为什么 02000 的计算结果为 1024
- 如何让编译器忽略这个计算结果为 false 的 if-constexpr?
- 为什么需要 FPU 重置以防止 NaN 结果传播到下一个计算结果?
- C++:术语的计算结果不是采用 1 个参数的函数
- 如果满足嵌套条件,则计算结果未显示结果C
- 为什么这个条件运算符的计算结果为 int?
- 在线程错误 C2064 中:term 的计算结果不为 0 个参数的函数
- 错误 C2064:term 的计算结果不是采用 1 个参数的函数 - 关于线程的一些东西
- 提升线程:术语的计算结果不为 0 个参数