다음 C 프로그램의 출력값을 쓰시오.
#include <stdio.h>
int calc(int n) {
static int state = 1;
if (n == 0) return state;
state += n;
int nested = calc(n - 2);
return nested + state;
}
int main(void) {
printf("%d", calc(4));
return 0;
}모범답안
21
풀이와 판단 근거
calc(4)에서 정적 변수 state는 1에서 5가 되고 calc(2)를 호출한다. calc(2)는 같은 state를 7로 만든 뒤 calc(0)에서 7을 반환받아 7+7인 14를 반환한다.
바깥 호출로 돌아와도 state는 호출별 지역 복사본이 아니라 공유 정적 변수이므로 여전히 7이고, 최종 결과는 14+7인 21이다.
자주 틀리는 지점
- 각 재귀 호출마다 state가 1로 초기화된다고 계산
- 재귀 복귀 시 state가 이전 값 5로 되돌아간다고 판단
- n이 0보다 작을 때까지 호출한다고 계산
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.