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

C++ C++;,递归正确答案,但未正确返回,c++,recursion,return,garbage,C++,Recursion,Return,Garbage,这是我计算最大公约数的简单程序。它每次都返回一个垃圾值,与46332964相同。我绞尽脑汁想了一个小时,但似乎无法理解这个问题。经过研究,我还包括了原型,但仍然没有运气。它一直工作到它回来。请复制代码并运行它,请帮助我 #include <iostream> using namespace std; int calculate_gcd(int aa, int bb, int rem, int g); int main() { int a, b; int rem =

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

#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 
         }
}
#包括
使用名称空间std;
int计算_gcd(int aa、int bb、int rem、int g);
int main()
{
INTA,b;
int-rem=-1;
int-gcd=0;
cout>a;
cout>b;
if(a如果(a您缺少一个返回值,您应该使用
返回值计算\u gcd(aa,bb,rem,g);
而不仅仅是递归


您可以通过使用
-Wreturn type
捕捉到这种情况。其他编译器可能也会对此发出警告。

您缺少一个返回值。您应该使用
返回值计算\u gcd(aa,bb,rem,g);
,而不仅仅是递归


您可以通过使用
-Wreturn type
捕捉到这种情况。其他编译器可能也会对此发出警告。

您缺少一个返回值。您应该使用
返回值计算\u gcd(aa,bb,rem,g);
,而不仅仅是递归


您可以通过使用
-Wreturn type
捕捉到这种情况。其他编译器可能也会对此发出警告。

您缺少一个返回值。您应该使用
返回值计算\u gcd(aa,bb,rem,g);
,而不仅仅是递归

您可以通过使用
-Wreturn type
捕捉到这种情况。其他编译器可能也会对此发出警告。

函数头

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++的iFixes中受益匪浅,比如cOUT/COD>,而不是像C代码> PrimTf<代码>这样的低级C I/O函数。这是因为Prtff和家庭不执行任何类型检查,所以很容易出错。 此外,尽管这听起来像是balderdash,但通过使用100%一致的缩进,您将受益匪浅。幸运的是,有一些免费工具可以帮助您实现这一点。如果您喜欢的IDE或编辑器不支持自动源代码格式化,请查看免费的AStyle程序。

函数离子头

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++的iFixes中受益匪浅,比如cOUT/COD>,而不是像C代码> PrimTf<代码>这样的低级C I/O函数。这是因为Prtff和家庭不执行任何类型检查,所以很容易出错。 此外,尽管这听起来像是balderdash,但通过使用100%一致的缩进,您将受益匪浅。幸运的是,有一些免费工具可以帮助您实现这一点。如果您喜欢的IDE或编辑器不支持自动源代码格式化,请查看免费的AStyle程序。

函数离子头

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++的iFixes中受益匪浅,比如cOUT/COD>,而不是像C代码> PrimTf<代码>这样的低级C I/O函数。这是因为Prtff和家庭不执行任何类型检查,所以很容易出错。 此外,尽管这听起来像是balderdash,但通过使用100%一致的缩进,您将受益匪浅。幸运的是,有一些免费工具可以帮助您实现这一点。如果您喜欢的IDE或编辑器不支持自动源代码格式化,请查看免费的AStyle程序。

函数离子头

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++的iFixes中受益匪浅,比如 CUT,而不是低级的C/IO函数