책 내용 질문하기
실기책 1권 96쪽 6번 질문입니다
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
96
조회수
51
작성일
2018-09-14
작성자
탈퇴*원
첨부파일

96쪽 해설에

Recursive(5)

(2*recursive(4))+1 하면

2곱하기 4는 8하고 +1하면 9전달 아닌가요 ?

4전달은 뭔가요 ??

계산방법이 어떻게 되나요 ?

Recursive(1)도

2*0+1이면 1이아닌가요? 0전달은 무엇이고

리턴할때 recursive(0)에서 recursive(1)로 왜 2가 반환

되는 걸까요 2는 어디서 나온가죠 ?

답변
2018-09-14 15:12:35

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

① int recursive(int n) {

② int i;

③ if (n < 1)

④ return 2;

⑤ else

⑥ {

⑦ i = (2 * recursive(n - 1)) + 1;

⑧ printf("%d\n", i);

⑨ return i;

⑩ }

⑪ }

먼저 사용자 함수에 대한 정확한 이해가 필요할 것 같습니다.

메인에서 수행된 recursive(5)는 recursive라는 사용자 정의 함수를 수행하되 n에 5값을 부여한 상태에서 그 아래에 적힌 구문들을 수행하라는 의미입니다.

1. recursive(5)를 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

2. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

3. i에 (2 * recursive(4)) + 1을 저장해야 하므로 recursive(4)를 다시 구해야 합니다.

4. recursive(4)를 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

5. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

6. i에 (2 * recursive(3)) + 1을 저장해야 하므로 recursive(3)을 다시 구해야 합니다.

7. recursive(3)을 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

8. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

9. i에 (2 * recursive(2)) + 1을 저장해야 하므로 recursive(2)를 다시 구해야 합니다.

10. recursive(2)를 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

11. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

12. i에 (2 * recursive(1)) + 1을 저장해야 하므로 recursive(1)을 다시 구해야 합니다.

13. recursive(1)을 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

14. ③의 n<1은 참이므로 ④를 수행합니다.

15. ④는 2라는 값을 돌려주며 recursive(1)을 종료합니다.

이제 드디어 종료되었으니 값을 다시 돌려주며 계산해보겠습니다.

13~15에 해당하는 recursive(1)은 2라는 결과 값이 나왔습니다.

10~12에 해당하는 recursive(2)는 (2 * recursive(1)) + 1이므로 recursive(1)은 2라고 앞에서 나왔으니 (2*2)+1이 되어 5라는 값이 나옵니다.

7~9에 해당하는 recursive(3)은 (2 * recursive(2)) + 1이므로 recursive(2)는 5라고 앞에서 나왔으니 (2*5)+1이 되어 11이라는 값이 나옵니다.

4~6에 해당하는 recursive(4)는 (2 * recursive(3)) + 1이므로 recursive(3)는 11이라고 앞에서 나왔으니 (2*11)+1이 되어 23이라는 값이 나옵니다.

1~3에 해당하는 recursive(5)는 (2 * recursive(4)) + 1이므로 recursive(4)는 23이라고 앞에서 나왔으니 (2*23)+1이 되어 47이라는 값이 나옵니다.

이를 수학을 이용해 한 식으로 풀어내면 recursive(5)는 2*(2*(2*(2*2+1)+1)+1)+1 이 되겠습니다.

행복한 하루되세요.^^

  • *
    2018-09-14 15:12:35

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

    ① int recursive(int n) {

    ② int i;

    ③ if (n < 1)

    ④ return 2;

    ⑤ else

    ⑥ {

    ⑦ i = (2 * recursive(n - 1)) + 1;

    ⑧ printf("%d\n", i);

    ⑨ return i;

    ⑩ }

    ⑪ }

    먼저 사용자 함수에 대한 정확한 이해가 필요할 것 같습니다.

    메인에서 수행된 recursive(5)는 recursive라는 사용자 정의 함수를 수행하되 n에 5값을 부여한 상태에서 그 아래에 적힌 구문들을 수행하라는 의미입니다.

    1. recursive(5)를 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

    2. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

    3. i에 (2 * recursive(4)) + 1을 저장해야 하므로 recursive(4)를 다시 구해야 합니다.

    4. recursive(4)를 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

    5. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

    6. i에 (2 * recursive(3)) + 1을 저장해야 하므로 recursive(3)을 다시 구해야 합니다.

    7. recursive(3)을 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

    8. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

    9. i에 (2 * recursive(2)) + 1을 저장해야 하므로 recursive(2)를 다시 구해야 합니다.

    10. recursive(2)를 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

    11. ③의 n<1은 거짓이므로 ⑦을 수행합니다.

    12. i에 (2 * recursive(1)) + 1을 저장해야 하므로 recursive(1)을 다시 구해야 합니다.

    13. recursive(1)을 수행하게 되면 ②에서 i를 선언한 후 ③으로 갑니다.

    14. ③의 n<1은 참이므로 ④를 수행합니다.

    15. ④는 2라는 값을 돌려주며 recursive(1)을 종료합니다.

    이제 드디어 종료되었으니 값을 다시 돌려주며 계산해보겠습니다.

    13~15에 해당하는 recursive(1)은 2라는 결과 값이 나왔습니다.

    10~12에 해당하는 recursive(2)는 (2 * recursive(1)) + 1이므로 recursive(1)은 2라고 앞에서 나왔으니 (2*2)+1이 되어 5라는 값이 나옵니다.

    7~9에 해당하는 recursive(3)은 (2 * recursive(2)) + 1이므로 recursive(2)는 5라고 앞에서 나왔으니 (2*5)+1이 되어 11이라는 값이 나옵니다.

    4~6에 해당하는 recursive(4)는 (2 * recursive(3)) + 1이므로 recursive(3)는 11이라고 앞에서 나왔으니 (2*11)+1이 되어 23이라는 값이 나옵니다.

    1~3에 해당하는 recursive(5)는 (2 * recursive(4)) + 1이므로 recursive(4)는 23이라고 앞에서 나왔으니 (2*23)+1이 되어 47이라는 값이 나옵니다.

    이를 수학을 이용해 한 식으로 풀어내면 recursive(5)는 2*(2*(2*(2*2+1)+1)+1)+1 이 되겠습니다.

    행복한 하루되세요.^^

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