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로 계산하면 틀린다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.