매우 간단한건데요.. 이거 왜 이러는건가요?
글쓴이: yangam / 작성시간: 화, 2005/02/08 - 1:14오후
/*-----------------------------------------------------------------
<Euclid Algorithm - Third>
1. 임의의 두 정수 m, n 을 입력받는다.
2. n 이 0 이라면 m 이 최대공약수이다.
n 이 0 이 아니라면 m 에 m % n 을 대입한 후, 두 값을 교환한다.
(함수에 전달할 때 값이 바뀌게끔 전달한다)
3. 2 번으로 돌아간다.
(c) Sung-Am Yang, 2005-02-08
-----------------------------------------------------------------*/
#include <stdio.h>
int euclid_3rd(int m, int n);
int main()
{
int m = 384, n = 30;
printf("%d 와 %d 의 최대공약수(Greatest Common Divisor)는 %d 입니다.\n",
m, n, euclid_3rd(m, n));
return 0;
}
int euclid_3rd(int m, int n)
{
if (n == 0) {
printf("최대공약수는 %d 이다.\n", m);
return m;
}
else
euclid_3rd(n, m % n);
}
<결과>
최대공약수는 6이다.
384와 30 의 최대공약수(Greatest Common Divisor)는 863865 입니다.
GCC 3.4.3 으로 실행한 결과입니다.
Visual C++ 6.0 으로 실행했을 때는 잘 나옵니다.
(그런데 이런 경고가 뜹니다.. warning C4715: 'euclid_3rd' : not all control paths return a value)
저 소스에서 어떤 부분을 고치면 GCC 에서도 제대로 된 결과가 나올 수 있을까요?
Forums:


꼬리 재귀 같은데 ...
int euclid_3rd(int m, int n) { if (n == 0) { printf("최대공약수는 %d 이다.\n", m); return m; } else return euclid_3rd(n, m % n); }return을 빠트리신 것 같네요.
혹은..[code:1]int euclid_3rd(int m,
혹은..
int euclid_3rd(int m, int n) { if (n == 0) { printf("최대공약수는 %d 이다.\n", m); return m; } return euclid_3rd(n, m % n); }int형 리턴이 있어야 하는데 경우에 따라 리턴을 하지 않는 경우가 생기므로 나오는 경고입니다..
경고 하나하나 확인하는 것 중요하지요..
나중엔 에러를 낳으니까요.. ㅎㅎ
제목이 뭔지 모르게 흥미로워서 눌러보게 되는군요.. :wink:
ㅡ_ㅡ;
댓글 달기