C递归函数-GCD



我已经开始学习C和编程,并且我们被告知要制定一个程序,可以使用递归找到两个数字的GCD和LCM。

现在,我设法将它们放在一起。

#include<stdio.h>
int gcd(int a,int b);
int main()
{
    int a,b,l,temp;
    printf("Enter two numbers :n");
    scanf("%d%d",&a,&b);
    if(a<b)
    {
        temp=a;
        a=b;
        b=temp;
    }
    l=gcd(a,b);
    printf("GCD = %inLCM = %i",l,a*b/l);
    return 0;
}
int gcd(int a,int b)
{
    static int c;
    c=a%b;
    a=b;
    b=c;
    if(c!=0)
    {
        gcd(a,b);
    }
    else
        return a;
}

现在由于某些原因对我而言,该功能没有"否则"。更具体地喜欢这样:

int gcd(int a,int b)
{
    static int c;
    c=a%b;
    a=b;
    b=c;
    if(c!=0)
    {
        gcd(a,b);
    }
        return a;
}

尽管与作业无关,但我觉得我应该理解这里的问题是什么。作为新手,我将感谢所有帮助。

如果问题太愚蠢或代码太凌乱,我会提前道歉。

问题是递归调用:

int gcd(int a,int b)
{
    static int c;
    c=a%b;
    a=b;
    b=c;
    if(c!=0)
    {
        gcd(a,b); // The problem is here 
    }
    else
        return a;
}

您做了两种不同的方法:

  1. 在上面的情况下,如果c!=0,则没有返回语句。您的功能具有返回int。通常,编译器会给您警告,因为您将返回一个随机号码,请参见此处。假设您的功能与其他功能有效是幸运的。
  2. 没有其他语句,您将始终返回a。您计算GCD,但您永远不会使用结果,因此您的第一个呼叫的结果始终是您主的A和B之间的较小数字。您需要使用递归调用的结果来使该功能正常工作。

正确的方法是像Sanjay-Sopho一样返回您的递归电话结果:

return gcd(a,b);

此外,在if上使用牙套的编码样式是不良的编码样式;)两种情况都不错,但保持相同。

您询问了代码中的问题。在这里,

 static int c;

为什么它是静态的,此外,您不需要第三个变量就可以使用递归计算GCD。而且,

 gcd(a,b);

您在哪个变量中返回GCD。这根本没有意义。这不是一个空白功能,它正在返回int。

现在是正确的方法,

    if (b != 0)
     return gcd(b, a%b);
    else 
     return a;

就是这样。

in&quot in c&quot这样的制作一种方法,以获取两个数字并找到GCD是名称GCD

int gcd (int a,int b){ 
if (b==0)
return a;
else return gcd(b,a%b);

在主我将通过

综合
printf("G.C.D OF %d AND %d is : %d ",a,b,gcd(a,b));

我使用递归函数

最新更新