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)를 했을 때 어떻게 동작하는건지 알수 있을까요? (두개가 어떠한 차이가 있을까요?)

djm03178   4년 전

"재귀하는 부분에 return문을 안붙이면(gcd(b,a%b)) if문안에 있는 a가 반환되고"

이건 컴파일러마다, 환경에 따라 동작이 얼마든지 달라질 수 있는 undefined behavior입니다. 많은 환경에서 return을 필요로 하는 함수에서 리턴을 안 하는 경우 가장 최근에 %eax 레지스터에 들어간 값이 그대로 반환값인 것처럼 동작을 하지만 현재 채점 환경은 그렇지가 않습니다.

항상 return을 쓰는 것만이 옳습니다.

댓글을 작성하려면 로그인해야 합니다.