다음 C 언어로 작성된 함수는 정수 배열의 원소들의 총 합을 구하여 리… | [국회직 9급 컴퓨터일반] 16년 1회차 기출문제 상세 페이지
1[국회직 9급 컴퓨터일반] 16년 1회차
다음 C 언어로 작성된 함수는 정수 배열의 원소들의 총 합을 구하여 리턴하는 함수이다. ㉠의 위치에 들어가야 할 코드는? (단, 함수의 첫 번째 인자는 배열의 시작 위치를 나타내는 포인터, 두 번째 인자는 배열의 크기임)int sum(int* data, const int dsize)
{
if (dsize > 0)
return ㉠;
return 0;
}
1
*data + sum(data - 1, dsize + 1)
2
data + sum(data - 1, dsize + 1)
3
*data + sum(data - 1, dsize - 1)
4
*data + sum(data + 1, dsize - 1)
5
data + sum(data + 1, dsize - 1)
해설
㉠에는 *data + sum(data + 1, dsize - 1)이 들어가야 한다.
현재 원소 값에 나머지 배열의 합을 더하는 재귀 구조이다. 포인터는 다음 원소로 전진하고 크기는 1씩 줄어, dsize가 0이 되면 0을 반환하며 끝난다.
예를 들어 {1, 2, 3}이면 1 + (2 + (3 + 0)) = 6이 된다.
- *data + sum(data - 1, dsize + 1): 포인터가 뒤로 가고 크기가 커져 재귀가 끝나지 않는다.
- data + sum(data - 1, dsize + 1): 원소 값이 아닌 주소를 쓰고, 재귀도 끝나지 않는다.
- *data + sum(data - 1, dsize - 1): 포인터가 배열의 앞쪽으로 벗어난다.
- data + sum(data + 1, dsize - 1): *가 없어 원소 값이 아닌 포인터를 더하게 된다.
오류나 개정된 내용이 보이면 알려주세요