【发布时间】:2016-12-06 11:05:29
【问题描述】:
我最近开始学习 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 = %i\nLCM = %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;
}
现在由于某种我不知道的原因,如果没有“else”,该功能将无法工作。更具体地说是这样的:
int gcd(int a,int b)
{
static int c;
c=a%b;
a=b;
b=c;
if(c!=0)
{
gcd(a,b);
}
return a;
}
虽然与作业无关,但我觉得我应该明白这里的问题是什么。作为新手,我将不胜感激。
如果问题太愚蠢或代码太乱,我提前道歉。
【问题讨论】:
-
为什么递归函数中的局部变量是
static?他们不应该。 -
if(c!=0)分支没有返回值。 -
而对
gdc的调用会丢弃返回值。