인프런 커뮤니티 질문&답변
21분 33초, 재귀함수 출력값 중
해결된 질문
작성
·
62
0
안녕하세요, 아래에서 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이 리턴되는 것입니다.
- 따라서, 질문하신
관련 질문과 답변을 통해 보다 자세히 이해하실 수 있도록 다음 링크를 추천드립니다:
- 자바 기출문제 변형 문제 질문있습니다: 자바 재귀 호출 및 출력 관련 설명이 포함되어 있습니다.
- 자바 업캐스팅, 재귀함수 질문드립니다.: 유사한 사례와 설명이 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





매번 빠르게 답변해주셔서 감사합니다!