다음 C 코드에서 함수 A와 B는 최대 공약수를 구하는 함수이다. 함수… | [7급 국가직 자료구조론] 21년 1회차 기출문제 상세 페이지
1[7급 국가직 자료구조론] 21년 1회차
다음 C 코드에서 함수 A와 B는 최대 공약수를 구하는 함수이다. 함수 B가 함수 A와 같은 결과를 출력하도록 ㉠, ㉡에 들어갈 내용을 바르게 연결한 것은?㉠ ㉡int A(int x, int y){
int r;
while (y != 0){
r = x % y; x = y; y = r;
}
return x;
}
int B(int x, int y) {
int r;
if ( ㉠ ) return x;
else {
r = x % y;
return ( ㉡ )
}
}
1
y==0 B(y, r);
2
y==0 B(r, y);
3
y!=0 B(y, r);
4
y!=0 B(r, y);
해설
㉠은 y==0, ㉡은 B(y, r);이다. 함수 A의 반복문을 재귀로 옮긴 유클리드 호제법이다.
A는 y가 0이 될 때까지 (x, y) ← (y, x % y)로 갱신한 뒤 x를 반환한다. 따라서 재귀에서도 y가 0이면 x를 반환하고, 아니면 r = x % y를 구해 B(y, r)을 호출한다.
- y==0과 B(r, y) 조합은 다음 호출에서 x % y가 다시 r이 되어 같은 호출이 반복되므로 끝나지 않는다.
- y!=0과 B(y, r) 조합은 y가 0이 아니면 곧바로 x를 반환하고, y가 0이면 0으로 나누는 나머지 연산을 수행한다.
- y!=0과 B(r, y) 조합은 종료 조건과 인자 순서가 모두 틀려 최대공약수를 구하지 못한다.
오류나 개정된 내용이 보이면 알려주세요