매우 간단한건데요.. 이거 왜 이러는건가요?
글쓴이: 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:
꼬리 재귀 같은데 ...
return을 빠트리신 것 같네요.
혹은..[code:1]int euclid_3rd(int m,
혹은..
int형 리턴이 있어야 하는데 경우에 따라 리턴을 하지 않는 경우가 생기므로 나오는 경고입니다..
경고 하나하나 확인하는 것 중요하지요..
나중엔 에러를 낳으니까요.. ㅎㅎ
제목이 뭔지 모르게 흥미로워서 눌러보게 되는군요.. :wink:
ㅡ_ㅡ;
댓글 달기