책 내용 질문하기
1권 101p 문제5번
도서
2019 시나공 정보처리기사 실기(산업기사포함)
페이지
101
조회수
1267
작성일
2019-03-15
작성자
탈퇴*원
첨부파일

답안지(493p)를 보니

(2*recursive(4))+1이

i=((2*23)+1)=47 

 

여기서 recursive(4)가 왜 23이에요??

 

알려주세요 ㅠㅠ 

답변
2019-03-15 14:59:22

안녕하세요 길벗수험서 운영팀입니다.

 

... 493쪽의 해설보다 잘 설명할 자신은 없지만 힘내보겠습니다.

 

먼저 전반적인 프로세스를 이해하셔야 합니다.

i=5가 입력되었다는 것은 recursive 함수에 돌입했다는 의미입니다. (n=i=5)

문제는 n<1이 될 때까지 i = (2 * recursive(n-1)) + 1 이라는 재귀함수 구문을 반복 수행해야 한다는 의미입니다.

 

i가 5일 때 i = (2 * recursive(4)) + 1 이 됩니다.

recursive(4)로 호출되겠죠. 그러면 n<1이 아니니 다시

 

i가 4일 때 i = (2 * recursive(3)) + 1 이 됩니다.

recursive(3)으로 호출되겠죠. 그러면 n<1이 아니니 다시 

 

i가 3일 때 i = (2 * recursive(2)) + 1 이 됩니다.

recursive(2)로 호출되겠죠. 그러면 n<1이 아니니 다시

 

i가 2일 때 i = (2 * recursive(1)) + 1 이 됩니다.

recursive(1)로 호출되겠죠. 그러면 n<1이 아니니 다시

 

i가 1일 때 i = (2 * recursive(0)) + 1 이 됩니다.

recursive(0)으로 호출되겠죠. 이제야 n<1이 되어서 2를 돌려 받습니다.

 

---------------------------

이제 되돌아 가야할 차례입니다.

recursive(0)은 2라는 결과가 나왔습니다. 그럼

 

i가 1일 때 i = (2 * 2) + 1 = 5가 나옵니다.

recursive(1)은 5라는 결과가 나왔습니다. 그럼 

 

i가 2일 때 i = (2 * 5) + 1 = 11이 나옵니다.

recursive(2)는 11이라는 결과가 나왔습니다. 그럼

 

i가 3일 때 i = (2 * 11) + 1 = 23이 나옵니다.

recursive(3)은 23이라는 결과가 나왔습니다. 그럼

 

i가 4일 때 i = (2 * 23) + 1 = 47이 나옵니다.

recursive(4)는 47이라는 결과가 나왔습니다. 그럼

 

i가 5일 때 i = (2 * 47) + 1 = 95가 나옵니다.

recursive(5)는 95라는 결과가 나왔습니다.

 

이런식으로 반복된 결과죠.

recursive(4)는 47입니다. 그림의 47은 연산이 되어 recursive(4)에 47을 넣어주는 화살표를 말합니다.

그와 같이 해석하면 recursive(3)은 23이 되죠.

 

행복한 하루되세요 :)

  • 관리자
    2019-03-15 14:59:22

    안녕하세요 길벗수험서 운영팀입니다.

     

    ... 493쪽의 해설보다 잘 설명할 자신은 없지만 힘내보겠습니다.

     

    먼저 전반적인 프로세스를 이해하셔야 합니다.

    i=5가 입력되었다는 것은 recursive 함수에 돌입했다는 의미입니다. (n=i=5)

    문제는 n<1이 될 때까지 i = (2 * recursive(n-1)) + 1 이라는 재귀함수 구문을 반복 수행해야 한다는 의미입니다.

     

    i가 5일 때 i = (2 * recursive(4)) + 1 이 됩니다.

    recursive(4)로 호출되겠죠. 그러면 n<1이 아니니 다시

     

    i가 4일 때 i = (2 * recursive(3)) + 1 이 됩니다.

    recursive(3)으로 호출되겠죠. 그러면 n<1이 아니니 다시 

     

    i가 3일 때 i = (2 * recursive(2)) + 1 이 됩니다.

    recursive(2)로 호출되겠죠. 그러면 n<1이 아니니 다시

     

    i가 2일 때 i = (2 * recursive(1)) + 1 이 됩니다.

    recursive(1)로 호출되겠죠. 그러면 n<1이 아니니 다시

     

    i가 1일 때 i = (2 * recursive(0)) + 1 이 됩니다.

    recursive(0)으로 호출되겠죠. 이제야 n<1이 되어서 2를 돌려 받습니다.

     

    ---------------------------

    이제 되돌아 가야할 차례입니다.

    recursive(0)은 2라는 결과가 나왔습니다. 그럼

     

    i가 1일 때 i = (2 * 2) + 1 = 5가 나옵니다.

    recursive(1)은 5라는 결과가 나왔습니다. 그럼 

     

    i가 2일 때 i = (2 * 5) + 1 = 11이 나옵니다.

    recursive(2)는 11이라는 결과가 나왔습니다. 그럼

     

    i가 3일 때 i = (2 * 11) + 1 = 23이 나옵니다.

    recursive(3)은 23이라는 결과가 나왔습니다. 그럼

     

    i가 4일 때 i = (2 * 23) + 1 = 47이 나옵니다.

    recursive(4)는 47이라는 결과가 나왔습니다. 그럼

     

    i가 5일 때 i = (2 * 47) + 1 = 95가 나옵니다.

    recursive(5)는 95라는 결과가 나왔습니다.

     

    이런식으로 반복된 결과죠.

    recursive(4)는 47입니다. 그림의 47은 연산이 되어 recursive(4)에 47을 넣어주는 화살표를 말합니다.

    그와 같이 해석하면 recursive(3)은 23이 되죠.

     

    행복한 하루되세요 :)

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