Wrong Result in finding GCM

H

Hyungku Im

#include <stdio.h>
int euclid(int, int);
int main()
{
printf("%d", euclid(36, 45)); // maybe return GCM of 36 and 45
return 0;
}
int euclid(int x, int y)
{
if (x>y) euclid(x-y, y);
else if (x<y) euclid(y-x, x);
else return x;
}

When my Dev C++ Compiler runs it, it results wrong.
The answer is 9 but it prints 4240752.
The VC++ 6 and BCB 6 works well.(but it returns warning error
'[C++ Warning] Unit1.c(20): W8070 Function should return a value' in BCB and
warning C4715: 'euclid' : not all control paths return a value in VC)
 
K

Kai-Uwe Bux

Hyungku said:
#include <stdio.h>
int euclid(int, int);
int main()
{
printf("%d", euclid(36, 45));  // maybe return GCM of 36 and 45
return 0;
}
int euclid(int x, int y)
{
if (x>y) euclid(x-y, y);

what about:

if (x>y) return euclid(x-y, y);
else if (x<y) euclid(y-x, x);

same here:

else if (x<y) return euclid(y-x, x);
else return x;
}

BTW, consider using <iostream> instead of <stdio.h>.
That makes your programm look more like C++ :)


Best

Kai-Uwe
 
J

jianjia

try this and watch find will happen?

int euclid(unsigned int x, unsigned int y)
{
if (x>y)
{
printf("1: %u,%u\n", x,y);
return euclid(x-y, y);
}
else
{
if (x<y)
{
printf("2: %u,%u\n", x,y);
return euclid(y-x, x);
}
}

return x; ///x=y
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,763
Messages
2,569,563
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top