책 내용 질문하기
121페이지 47번 문제 질문있습니다.
도서
2017 시나공 정보처리기사 실기(산업기사 포함) 특별개정판
페이지
121
조회수
73
작성일
2017-03-20
작성자
첨부파일

재귀함수 부분이 어떻게 돌아가는지 잘 이해가 되지 않습니다 ..

초기값부터 대입하면서 값을 추적해서, a,b,c 각각 5,5,15가 되는것까진 문제가 없는데,

예를들어 1회 while문 실행에서 a값이 1이되고 c값이 1이 되고 prnt(1,5,1)을 호출하게 됩니다.

근데 해설지에는 각각의 회에 있는 prnt 함수를 넘어간후 , 마지막에 while의 조건에 맞지 않아모두 반복문을 나온다고

설명이 되어있는데, 각회에서 prnt 함수가 호출되고, 그 호출된 함수에서 다시 또 호출이 될텐데. 어떻게 이해해야 할

지 조금 난해한 부분이 있습니다! 조금 더 자세한 설명 부탁드리겠습니다.

답변
2017-03-20 15:13:11

안녕하세요.

해설에서와 같이

a 0

b 5

c 0

인 상태에서 재귀호출이 시작되어 자신을 다시 부릅니다.

즉 현재 자신이 속한 함수를 다시 처리한다는 것이죠.

1회 호출을 수행하면

a 1

b 5

c 1

이 됩니다.

2회 호출을 수행하면

a 2

b 5

c 3

이 됩니다.

3회 호출을 수행하면

a 3

b 5

c 6

이 됩니다.

4회 호출을 수행하면

a 4

b 5

c 10

이 됩니다.

5회 호출을 수행하면

a 5

b 5

c 15

이 됩니다.

6회 호출을 수행하면

*x < *y 조건을 만족하지 않아 while문을 벗어납니다.

벗어난 후 prnt 함수가 종료되어 자신을 호출한 곳으로 이동합니다. 자신을 호출한 곳은 5회의 prnt 함수입니다.

5회 prnt 함수가 호출된 곳으로 되돌아 오면 while 반복문의 끝이므로 다시 while 반복문의 시작으로 가서 조건을 비교합니다.

*x < *y 조건을 만족하지 않아 while문을 벗어납니다.

벗어난 후 prnt 함수가 종료되어 자신을 호출한 곳으로 이동합니다. 자신을 호출한 곳은 4회의 prnt 함수입니다.

이와 같이 자신을 호출한 곳으로 돌아가면서 while문을 벗어나므로

최종적으로는 재귀호출이 처음 시작된 1회 호출 부분으로 돌아오며 여기서도 while문을 벗어나

main() 함수에서 prnt 함수 호출 부분으로 돌아갑니다.

그런 다음 이후 문장인 printf 문을 수행합니다.

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

  • *
    2017-03-20 15:13:11

    안녕하세요.

    해설에서와 같이

    a 0

    b 5

    c 0

    인 상태에서 재귀호출이 시작되어 자신을 다시 부릅니다.

    즉 현재 자신이 속한 함수를 다시 처리한다는 것이죠.

    1회 호출을 수행하면

    a 1

    b 5

    c 1

    이 됩니다.

    2회 호출을 수행하면

    a 2

    b 5

    c 3

    이 됩니다.

    3회 호출을 수행하면

    a 3

    b 5

    c 6

    이 됩니다.

    4회 호출을 수행하면

    a 4

    b 5

    c 10

    이 됩니다.

    5회 호출을 수행하면

    a 5

    b 5

    c 15

    이 됩니다.

    6회 호출을 수행하면

    *x < *y 조건을 만족하지 않아 while문을 벗어납니다.

    벗어난 후 prnt 함수가 종료되어 자신을 호출한 곳으로 이동합니다. 자신을 호출한 곳은 5회의 prnt 함수입니다.

    5회 prnt 함수가 호출된 곳으로 되돌아 오면 while 반복문의 끝이므로 다시 while 반복문의 시작으로 가서 조건을 비교합니다.

    *x < *y 조건을 만족하지 않아 while문을 벗어납니다.

    벗어난 후 prnt 함수가 종료되어 자신을 호출한 곳으로 이동합니다. 자신을 호출한 곳은 4회의 prnt 함수입니다.

    이와 같이 자신을 호출한 곳으로 돌아가면서 while문을 벗어나므로

    최종적으로는 재귀호출이 처음 시작된 1회 호출 부분으로 돌아오며 여기서도 while문을 벗어나

    main() 함수에서 prnt 함수 호출 부분으로 돌아갑니다.

    그런 다음 이후 문장인 printf 문을 수행합니다.

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

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