我已经开始学习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;
}
您做了两种不同的方法:
- 在上面的情况下,如果
c!=0
,则没有返回语句。您的功能具有返回int。通常,编译器会给您警告,因为您将返回一个随机号码,请参见此处。假设您的功能与其他功能有效是幸运的。 - 没有其他语句,您将始终返回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));
我使用递归函数