해결된 질문
작성
·
48
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을 반환하며, 이 반환이 이루어지면 더 이상 재귀 호출이 발생하지 않습니다.sum(0)
에서 0이 반환됩니다.실행 흐름:
n = 1
일 때에는 “Add 1” 출력 후 super.sum(0)
이 호출되면서 “Add 0”이 출력되고, 그 다음에 base case에 의해 0이 리턴되는 것입니다.관련 질문과 답변을 통해 보다 자세히 이해하실 수 있도록 다음 링크를 추천드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
매번 빠르게 답변해주셔서 감사합니다!