21분 33초, 재귀함수 출력값 중
안녕하세요, 아래에서 Add 0이 출력되는 부분 관련 여쭙습니다.

아래 부모 코드 블록에서 n이 0인 경우에는, 0을 return하는데
class Sum {
int sum(int n) { // 5
if (n <= 0) {
return 0;
} else {
return n + sum(n - 1);
}
}
}n = 1 일 때, 1 + sum(0)에서 sum(0)이 재정의된 자식의 메서드를 호출하여, "Add 0"이 출력되는 것인지,
왜 부모의 sum(0)의 값인 0을 return하는지, 헷갈려서 질문을 드립니다...!
답변 2
1
자식에서 명시적으로 super.메서드() 한 것이 아니라면, 재정의된 자식 메서드를 실행하기 때문입니다.
부모의 sum(0)이 값이 아니라, 자식 메서드에 0이 들어가서 출력하고 0을 리턴한 것입니다.
자식 sum에 0이 들어감 -> 자식 내의 출력문 수행 -> 리턴값 자체가 부모의 sum()에 0을 넣으라고 호출 -> 부모의 sum()에 가보니까 0인 경우 if문에 걸려 0을 리턴
이렇게 되는 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. Hu Young Lee님.
재귀 함수와 관련하여 혼란스러운 부분이 있으신 것 같네요. 질문 주신 내용에서 “Add 0”이 출력되는 이유와 부모 클래스의 sum 메서드에서 n이 0일 때의 동작에 대해 정리해보겠습니다.
재귀 호출 과정:
sum메서드는 재귀적으로 호출됩니다. 즉,sum(5)를 호출하면sum(4),sum(3), …,sum(0)까지 순차적으로 호출됩니다.
자식 클래스의 메서드 동작:
- 주어진 코드에서는 자식 클래스에서
sum메서드를 오버라이드하며, 먼저 “Add n”을 출력한 다음,super.sum(n)을 호출합니다.
- 자식 클래스의
sum호출은 부모 클래스의sum을 호출하기 전 “Add 0”까지 출력하게 됩니다.
- 주어진 코드에서는 자식 클래스에서
기저 조건(Base Case):
- 부모 클래스
Sum의sum메서드는n <= 0일 때 0을 반환하며, 이 반환이 이루어지면 더 이상 재귀 호출이 발생하지 않습니다.
- 즉, 실제로 출력 순서는 “Add 0”이 출력된 이후, 최종적으로 부모의
sum(0)에서 0이 반환됩니다.
- 부모 클래스
실행 흐름:
- 따라서, 질문하신
n = 1일 때에는 “Add 1” 출력 후super.sum(0)이 호출되면서 “Add 0”이 출력되고, 그 다음에 base case에 의해 0이 리턴되는 것입니다.
- 따라서, 질문하신
관련 질문과 답변을 통해 보다 자세히 이해하실 수 있도록 다음 링크를 추천드립니다:
- 자바 기출문제 변형 문제 질문있습니다: 자바 재귀 호출 및 출력 관련 설명이 포함되어 있습니다.
- 자바 업캐스팅, 재귀함수 질문드립니다.: 유사한 사례와 설명이 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정처기 2026-3 실기 문의
0
83
2
정처기 실기 3회 컴싸 사용 여부
0
50
1
모의고사 1 회 2번문제 중
0
66
2
26-2 이론문제 재탕
1
52
1
26-2년도 코드문제
0
36
0
26-2 코드문제
0
42
1
15분 48초 질문
0
55
2
26-1년도 이론문제 재탕
0
63
1
26-1년도 코드문제 재탕
0
44
0
이론재탕만 눈치챘어도
0
72
1
25-3년도 이론문제 재탕
0
55
1
25-3년도 코드문제 재탕
0
41
0
출력값 문의
0
53
2
25-2 분기커버리지
0
46
0
25-2 이론 재탕
0
65
1
25-1 이론 재탕
0
53
1
서브넷 마스크
0
50
2
모의고사 1회 계산문제 2개 맞았는데
0
67
2
업캐스팅 문제 예시 4번 부모 호출
0
51
2
모의고사 자료 해설이 너무 불친절하네요.
0
93
2
부모의 생성자 출력 관련
0
48
2
24-3 이론파트 재탕문제
0
57
0
누락코드
0
45
1
다차원 배열 포인터 질문있습니다
0
71
3





