121쪽 47번 문제와 91쪽 3번 문제의 차이점이 잘 이해가 안 됩니다.
- 91쪽 3번에서는,
main 실행문에서 prnt() 함수를 호출해서 while 반복문을 실행한 후 조건에서 벗어나면 자
신을 호출하는 prnt() 함수 없이 바로 탈출해서 main의 prnt()로 돌아가 다음 실행문인
printf()를 실행하고 종료했는데
- 121쪽 47번과 118쪽 41번 문제에서는,
while문에서 자기 자신을 호출하는 prnt() 함수를 별도로 실행해서 조건에서 벗어나는 경
우 복잡한 과정을 거쳐 main()의 prnt()로 되돌아갔는데 91쪽 3번 문제와 무슨 차이가 있
는지요?
91쪽 3번 문제 처럼 prnt() 함수를 생략하면 결과가 달라지는지요?
달라진다면 while문의 prnt()함수를 생략할 경우 어떤 결과가 나오는지요?
<답변>
안녕하세요.
91쪽 문제3번은 자기호출이 아니라 단순한 함수호출입니다.
함수를 호출하여 처리하고 다시 돌아오는 것이죠.
하지만 121쪽의 문제47번은 prnt함수 안에서 다시 prnt, 즉 자신을 다시 호출하는 경우입
니다.
만일 while문 안에서 자신을 다시 호출하는 prnt함수가 없다면
단순 함수 호출과 마찬가지로
prnt 함수가 한 번 수행된 후 main 함수로 돌아가게 됩니다.
위와 같이 질문을 해서 답변을 받았는데 그래도 이해가 안됩니다.
91쪽 3번 문제에서 처럼 자기자신을 호출하는 prnt함수가 없더라도 호출된 prnt함수 내의
while 조건문을 조건을 만족하는 범위 내에서 반복실행한 후 그 결과값을 포인트변수에 의
해 a, b, c에 저장을 한 후 main으로 돌아간다면
단순한 함수호출만 실행해도 호출문에서 while 반복문에 의해서 조건이 만족하는 동안,
즉 ①에서 ⑥까지 실행해서 5, 5, 15의 결과값을 a, b, c에 저장한 후 main으로 돌아가는 게
아닌가요?
그런데 굳이 자기 자신을 호출하는 prnt함수를 사용한 이유를 모르겠습니다.
아니라면 제가 while 조건문을 잘못 이해하고 있는 건가요?
while문에 prnt() 자기호출문이 없으면 ①에서 ⑥까지의 반복이 실행되지 않는 건가요?
만일 while문에 prnt() 자기호출문이 없을 경우 다른 결과가 나온다면 어떤 결과가 나오는지 풀이과정과 결과값을 적어주시면 고맙겠습니다.
안녕하세요.
재귀호출의 과정을 설명하기 위한 문제라고 이해하시면 될 것 같습니다.
물론 재귀호출 형태가 아니라
prnt() 함수를 여러 번 호출해서 결과를 산출할 수도 있고
prnt() 함수 안에서 다시 prnt()를 호출하는 재귀 호출 과정으로 구현할 수도 있습니다.
문제는 재귀 함수의 이해를 위해 제작된 것으로
재귀 호출이 프로그래머에 의해 필요한 경우 작성되는 것으로 무조건 재귀 호출을 사용해야 하는 것은 아닙니다.
121쪽 47번에서 prnt 함수가 호출된 횟수만큼
91쪽 3번의 main() 함수 안에서
prnt(&a, &b, &c);를 여러 번 사용해서도 구현할 수 있다는 의미입니다.
오늘도 즐거운 하루 되세요.
-
*2017-04-04 10:50:24
안녕하세요.
재귀호출의 과정을 설명하기 위한 문제라고 이해하시면 될 것 같습니다.
물론 재귀호출 형태가 아니라
prnt() 함수를 여러 번 호출해서 결과를 산출할 수도 있고
prnt() 함수 안에서 다시 prnt()를 호출하는 재귀 호출 과정으로 구현할 수도 있습니다.
문제는 재귀 함수의 이해를 위해 제작된 것으로
재귀 호출이 프로그래머에 의해 필요한 경우 작성되는 것으로 무조건 재귀 호출을 사용해야 하는 것은 아닙니다.
121쪽 47번에서 prnt 함수가 호출된 횟수만큼
91쪽 3번의 main() 함수 안에서
prnt(&a, &b, &c);를 여러 번 사용해서도 구현할 수 있다는 의미입니다.
오늘도 즐거운 하루 되세요.