모두CBT

20-4아래 Java 프로그램의 출력 결과를 적으시오.class Bas… | 2020년 정보처리기사실기 4회차 기출문제 상세 페이지

4

20-4

아래 Java 프로그램의 출력 결과를 적으시오.

class Base {
    int calc(int n) {
        if (n <= 1) return n;
        return calc(n - 1) + calc(n - 2);
    }
}

class Sub extends Base {
    @Override
    int calc(int n) {
        if (n <= 1) return 1;
        return calc(n - 2) + 2 * calc(n - 3);
    }
}

public class Main {
    public static void main(String[] args) {
        Base obj = new Sub();
        System.out.print(obj.calc(6));
    }
}
해설

11


[해설]

obj는 Base 타입이지만 실제 객체가 Sub이므로, calc 호출과 그 안의 재귀 호출이 모두 Sub의 calc로 연결된다(동적 바인딩).

  • n ≤ 1(음수 포함)이면 1: calc(1)=1, calc(0)=1, calc(-1)=1
  • calc(2) = calc(0) + 2×calc(-1) = 3
  • calc(3) = calc(1) + 2×calc(0) = 3
  • calc(4) = calc(2) + 2×calc(1) = 5
  • calc(6) = calc(4) + 2×calc(3) = 5 + 6 = 11

따라서 출력은 11이다. Base의 피보나치식 calc(6)=8로 계산하면 틀린다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.