문제

함수의 재귀호출을 사용해서 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를 출력한다.

Tags:

Updated: