문제
아래 C 코드의 실행결과로 올바른 것은 무엇인가?
Cint fn(int* x, int n){ if(n==1) return 1; return *x + fn(x, n-1); } int main(){ int x=5; printf("%d", fn(&x, x)); return 0; }
① 21 ② 25 ③ 15 ④ 5
정답
1번
해설
정답: 1. fn(&x,5)는 5+5+5+5+1을 계산하므로 21이 출력된다.
오답 풀이
- 1번: 재귀 호출이 n=1에서 1을 반환하므로 총합은 21이다.
- 2번: n=1에서도 5를 더한다고 착각한 값이다.
- 3번: 재귀 횟수를 부족하게 계산한 값이다.
- 4번: 첫 번째 포인터 값만 출력하는 코드가 아니다.
보충 개념 재귀 함수는 종료 조건과 각 호출에서 누적되는 값을 정확히 추적해야 한다.