Я начал изучать C и программирование в целом относительно недавно, и нам сказали сделать программу, которая находит GCD и LCM из двух чисел, используя рекурсию.C Рекурсивная функция - GCD
Теперь после некоторого измельчения мне удалось собрать это вместе.
#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' отбрасывает возвращаемое значение. –