2609번 - 최대공약수와 최소공배수
제가 재귀활용에 약해서 return에 질문이 있습니다.
int gcd(int a, int b) { if (b == 0) { return a; } gcd(b, a%b); ***}
main()
int num1,num2;
cout << gcd(num1,num2) <<"\n";
재귀하는 부분에 return문을 안붙이면(gcd(b,a%b)) if문안에 있는 a가 반환되고
return gcd(b, a%b) 했을 때도 똑같은 값이 나옵니다.
=> return gcd(b, a%b)를 했을 때 어떻게 동작하는건지 알수 있을까요? (두개가 어떠한 차이가 있을까요?)
"재귀하는 부분에 return문을 안붙이면(gcd(b,a%b)) if문안에 있는 a가 반환되고"
이건 컴파일러마다, 환경에 따라 동작이 얼마든지 달라질 수 있는 undefined behavior입니다. 많은 환경에서 return을 필요로 하는 함수에서 리턴을 안 하는 경우 가장 최근에 %eax 레지스터에 들어간 값이 그대로 반환값인 것처럼 동작을 하지만 현재 채점 환경은 그렇지가 않습니다.
항상 return을 쓰는 것만이 옳습니다.
댓글을 작성하려면 로그인해야 합니다.
lkc263 4년 전
제가 재귀활용에 약해서 return에 질문이 있습니다.
int gcd(int a, int b) {
if (b == 0) {
return a;
}
gcd(b, a%b); ***
}
main()
int num1,num2;
cout << gcd(num1,num2) <<"\n";
재귀하는 부분에 return문을 안붙이면(gcd(b,a%b)) if문안에 있는 a가 반환되고
return gcd(b, a%b) 했을 때도 똑같은 값이 나옵니다.
=> return gcd(b, a%b)를 했을 때 어떻게 동작하는건지 알수 있을까요? (두개가 어떠한 차이가 있을까요?)