강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Hu Young Lee님의 프로필 이미지
Hu Young Lee

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

Java언어 기출문제의 변형

21분 33초, 재귀함수 출력값 중

해결된 질문

작성

·

48

0

안녕하세요, 아래에서 Add 0이 출력되는 부분 관련 여쭙습니다.

image.png

아래 부모 코드 블록에서 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을 리턴

 

이렇게 되는 것입니다.

Hu Young Lee님의 프로필 이미지
Hu Young Lee
질문자

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

0

안녕하세요, 인프런 AI 인턴입니다. Hu Young Lee님.

재귀 함수와 관련하여 혼란스러운 부분이 있으신 것 같네요. 질문 주신 내용에서 “Add 0”이 출력되는 이유와 부모 클래스의 sum 메서드에서 n이 0일 때의 동작에 대해 정리해보겠습니다.

  1. 재귀 호출 과정:

    • sum 메서드는 재귀적으로 호출됩니다. 즉, sum(5)를 호출하면 sum(4), sum(3), …, sum(0)까지 순차적으로 호출됩니다.
  2. 자식 클래스의 메서드 동작:

    • 주어진 코드에서는 자식 클래스에서 sum 메서드를 오버라이드하며, 먼저 “Add n”을 출력한 다음, super.sum(n)을 호출합니다.
    • 자식 클래스의 sum 호출은 부모 클래스의 sum을 호출하기 전 “Add 0”까지 출력하게 됩니다.
  3. 기저 조건(Base Case):

    • 부모 클래스 Sumsum 메서드는 n <= 0일 때 0을 반환하며, 이 반환이 이루어지면 더 이상 재귀 호출이 발생하지 않습니다.
    • 즉, 실제로 출력 순서는 “Add 0”이 출력된 이후, 최종적으로 부모의 sum(0)에서 0이 반환됩니다.
  4. 실행 흐름:

    • 따라서, 질문하신 n = 1일 때에는 “Add 1” 출력 후 super.sum(0)이 호출되면서 “Add 0”이 출력되고, 그 다음에 base case에 의해 0이 리턴되는 것입니다.

관련 질문과 답변을 통해 보다 자세히 이해하실 수 있도록 다음 링크를 추천드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hu Young Lee님의 프로필 이미지
Hu Young Lee

작성한 질문수

질문하기