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가되지 않나요?
시험이 얼마남지 않아서 급합니다 꼭좀 부탁드립니다 ㅠㅠ...
안녕하세요.
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와 같이 출력됩니다.
관련 내용이 시험대비자료에 포함되어 있으니 다운받아 확인해 보세요.
오늘도 즐거운 하루 되세요.