gpt4 book ai didi

C++,递归正确答案但未正确返回

转载 作者:行者123 更新时间:2023-11-28 00:34:39 27 4
gpt4 key购买 nike

好的,下面是我计算最大公约数的简单程序。它每次都返回一个垃圾值,与 46332964 相同。我思考了一个小时,但似乎无法理解这个问题。经过研究,我也包括了原型(prototype),但仍然没有运气。它会一直工作直到它返回。请复制代码并运行它,请帮助我。

#include <iostream>
using namespace std;

int calculate_gcd(int aa, int bb, int rem, int g);

int main()
{
int a, b;
int rem = -1;
int gcd=0;

cout << "Number 1: "; //taking inputs
cin >> a;
cout << "Number 2: ";
cin >> b;

if (a < b) //swapping if number greater than the number according to the code
{
a = a + b;
b = a - b;
a = a - b;
}

gcd = calculate_gcd(a, b, rem, gcd);

if (a <= 0 || b <= 0)
{
rem = 0;
cout <<"GCD doesnot exists\n";
} //just in case of zeros
else
cout << "\nthe GCD of "<<a <<" and "<<b <<" is "<<gcd <<"\n\n"; //the main answer

system("pause");
return 0;
}

int calculate_gcd(int aa, int bb, int rem, int g)
{
if (rem != 0)
{
if (aa%bb == 0)
{
rem = 0;
g = bb;
printf("**GCD is %d\n", g);
}
else {
rem = aa % bb;
aa = bb;
bb = rem;
}
calculate_gcd(aa, bb, rem, g);
}
else {
printf("**here also GCD is correct as %d \n", g);
return g; //returning
}
}

最佳答案

函数头

int calculate_gcd(int aa, int bb, int rem, int g)

指定 g按值传递

这意味着在一个调用中,指定的值被复制到这个函数调用的本地g。对该本地 g 的更改对调用站点没有影响。

相反,您应该返回 函数结果,然后您就不需要g 参数:

int calculate_gcd(int aa, int bb, int rem)

更仔细的分析会告诉您,您实际上也不需要 rem 参数,因此:

int calculate_gcd(int aa, int bb)

顺便说一下,作为初学者,您将从使用 C++ iostreams(如 cout)而不是像 printf< 这样的低级 C i/o 函数中受益匪浅。这是因为 printf 和 family 不执行任何类型检查,所以很容易出错。

此外,虽然这听起来像是胡说八道,但通过正确垂直排列内容,即使用 100% 一致的缩进,您会受益匪浅。令人高兴的是,有免费工具可以帮助解决这个问题。如果您最喜欢的 IDE 或编辑器不支持自动源代码格式化,请查看免费的 AStyle 程序。

关于C++,递归正确答案但未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com