본문 바로가기
C

C언어 재귀 호출(recursive call)[C언어개발]

by cellin 2023. 11. 9.

재귀 호출(recursive call)

함수 내부에서 함수가 자기 자신을 또다시 호출하는 것

자기가 자신을 계속해서 호출하므로, 끝없이 반복

함수 내에 재귀 호출을 중단하도록 조건이 변경될 명령문을 반드시 포함

 

 

 

 

 

 

[EXAMPLE] 재귀 호출을 사용하지 않고 1부터 n까지 합 구하는 sum() 함수

int sum(int n) {
    int i;
    int result = 0;

    for (i = 1; i <= n; i++)

    {
        result += i;
    }
    return result;
}  
 

 

 

 

 1부터 4까지의 합을 구하는 알고리즘

 

1. 1부터 4까지의 합은 1부터 3까지의 합에 4를 더하면 됩니다.

2. 1부터 3까지의 합은 1부터 2까지의 합에 3을 더하면 됩니다.

3. 1부터 2까지의 합은 1부터 1까지의 합에 2를 더하면 됩니다.

4. 1부터 1까지의 합은 그냥 1입니다.

 

 

 

의사 코드(pseudo code)

 

시작
1. n이 1이 아니면, 1부터 (n-1)까지의 합에 n을 더한 값을 반환함.
2. n이 1이면, 그냥 1을 반환함.
끝
 

 

 

 

 

 

 

[EXAMPLE] 재귀 호출을 이용

#include <stdio.h>

int rSum(int);

int main(void)
{
	int n = 4;
	
	printf("1부터 %d까지의 합은 %d\n", n, rSum(n));
	return 0;
}

int rSum(int n)
{
	if (n == 1)					// n이 1이면, 그냥 1을 반환 
	{
		return 1;
	}
	return n + rSum(n-1);	// n이 1이 아니면, n을 1부터 (n-1)까지의 합과 더한 값을 반환
}
 

 

결과

1부터 4까지의 합은 10
 

 

 

재귀호출의 장점 : 코드의 간결함

재귀호출의 단점 : 무한 재귀호출의 위험성과 성능 상의 문제

 

 

 

 

사진: Unsplash🇸🇮 Janko Ferlič

728x90
반응형