혼자 공부하는 C언어 7챕터 도전실전예제
문제
함수의 재귀호출을 사용해서 1부터 10까지의 합을 계산해라.
풀이과정:
재귀호출 문제에서 가장 중요한 것은 작성순서이다.
int rec_func(int n);
int main(void)
{
int result = rec_func(1);
//1부터 10까지 더하기 위해 1을 넣어준다.
printf("%d", result);
return 0;
}
int rec_func(int n) {
if (n == 11) return 0;
//11이 되면 정지한다. 재귀함수보다 return문은 항상 위에 있어야 한다.
//그래야 함수가 무한하게 돌지 않는다.
else return n + rec_func(n + 1);
//풀이 참조
}
자세한 풀이:
int rec_func(int n) {
if (n == 11) return 0;
else return n + rec_func(n + 1);
rec_func(1)일때, n에 1이 대입된다. if문에서 n=11이 아니기 때문에 else문으로 들어가고 return n + rec_func(n + 1);에서 n에 1이 대입된다.
rec_func(1)은 1 + rec_func(2)를 리턴해야하므로 rec_func(2)을 호출한다.
rec_func(2)는 2 + rec_func(3)을 리턴해야하므로 rec_func(3)을 호출한다.
…
rec_func(10)은 10 + rec_func(11)을 리턴해야 하므로 rec_func(11)을 호출한다.
rec_func(11)에서 n = 11 이기 때문에 {if (n=11) return 0;}에 의해 0을 리턴한다.
이제 거꾸로 올라가기 시작한다.
rec_func(10)은 10 + 0(rec_func(11)의 return값) = 10 을 리턴한다.
rec_func(9)는 9 + 10(rec_func(10)의 return값) = 19 를 리턴한다.
…
rec_func(1)은 1 + 54(rec_func(2)의 return값) = 55 를 리턴한다.
결국 result = 55가 되며 화면에 55를 출력한다.