책 내용 질문하기
쪽수와관련없이 질문있습니다.
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
조회수
84
작성일
2017-10-06
작성자
탈퇴*원
첨부파일

C언어 코드 구현, 5를 입력했을 시 출력 결과 [배점 : 7점]
main( {
scanf(%d, n);
rec(n);
}
int rec(int n) {
int i;
if(n<1) return 2;
else {
i = (2*rec(n-1))+1;
println(i);
return i;
}
}
________________________________________
답 :
5
11
23
47
95

[출처] [IT] 정보처리산업기사 실기 2017년 1회 가답안|작성자 푸딩

정보처리산업기사 실기를 준비하는 학생입니다.

위 글은 정보처리 산업기사 2017년 1회차 시험을 본사람 블로그의 게시물입니다.

교재에 func에 대한 자세한 설명이 없어서 이해가 어렵습니다.

5를 입력했을시rec(n) 은 rec(5)일것이고

if(n<1) 여기서 n은 5를 받았기 때문에 else문으로 갈것입니다.

i = (2*rec(n-1))+1;
println(i);
return i; 여기서 i = (2*rec(n-1))+1; 은 2*rec(5-1))+1 로돼서 i의 값은 9가되지 않나요?

시험이 얼마남지 않아서 급합니다 꼭좀 부탁드립니다 ㅠㅠ...

답변
2017-10-10 11:54:19

안녕하세요.

i = (2*rec(n-1))+1; 은 2*rec(5-1))+1 로돼서 i의 값은 9가되지 않나요?

2*rec(5-1))+1이 계산되기 전에

rec(5-1)에서 rec(4)가 되어 rec함수, 즉 자기 자신을 다시 호출하는 재귀함수 처리를 수행한 후 값을 반환 받아야 합니다.

즉 n이 1보다 작을 때까지 반복하다 1보다 작아질 때 i는 2가 반환되어

2*(2)+1 = 5인 상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

2*(5)+1 = 11인 상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

2*(11)+1= 23인 상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

2*(23)+1 = 47인상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

2*(47)+1 = 95인 상태로 반환이 마무리 됩니다.

각 반환 과정에서 출력이 이루어지므로

5

11

23

47

95와 같이 출력됩니다.

관련 내용이 시험대비자료에 포함되어 있으니 다운받아 확인해 보세요.

오늘도 즐거운 하루 되세요.

  • *
    2017-10-10 11:54:19

    안녕하세요.

    i = (2*rec(n-1))+1; 은 2*rec(5-1))+1 로돼서 i의 값은 9가되지 않나요?

    2*rec(5-1))+1이 계산되기 전에

    rec(5-1)에서 rec(4)가 되어 rec함수, 즉 자기 자신을 다시 호출하는 재귀함수 처리를 수행한 후 값을 반환 받아야 합니다.

    즉 n이 1보다 작을 때까지 반복하다 1보다 작아질 때 i는 2가 반환되어

    2*(2)+1 = 5인 상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

    2*(5)+1 = 11인 상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

    2*(11)+1= 23인 상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

    2*(23)+1 = 47인상태로 그 이전에 호출한 함수에 다시 반환이 이뤄집니다. 그래서

    2*(47)+1 = 95인 상태로 반환이 마무리 됩니다.

    각 반환 과정에서 출력이 이루어지므로

    5

    11

    23

    47

    95와 같이 출력됩니다.

    관련 내용이 시험대비자료에 포함되어 있으니 다운받아 확인해 보세요.

    오늘도 즐거운 하루 되세요.

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.