Language/C

혼공C : 함수, 도전 실전 예제

짱도르딘 2024. 6. 20. 14:23
728x90

오늘은 혼공C Chapter 7 함수 부분의 도전 실전 예제를 풀어보려고 한다.

 

함수

C언어에서의 함수는 프로그램 내에서 특정 기능을 수행하는 코드 블록을 의미한다. C언어에서는 표준으로 제공하는 함수 ( ex : printf, scanf 등 ) 이외에도 자주 사용하는 코드들을 함수로 만들어 필요할 때마다 사용할 수 있다.

 

이와 같은 함수를 구현하려면 아래와 같은 3가지를 필요로 한다.

 

함수 정의 : 함수를 실제 코드로 만드는 것으로 함수의 기능을 구현한다.

함수 호출 : 함수를 사용하려면 함수명과 필요한 매개변수를 호출 부분에서 제공해야 한다.

함수 선언 : 함수를 사용하기 전에 해당 함수가 어떻게 정의되어 있는지 프로그램의 상단에 알리는 함수 선언을 포함해야 한다.

 

 

예를 들어 두 정수의 합을 계산하는 sum 함수를 구현하려고 한다면, 아래의 표와 같이 함수가 구성될 것이다.

10 + 20의 동작을 수행한다고 예시를 들어보자.

구분 예시 설명
함수 선언 int sum(int a, int b); 함수의 형태를 알리며, 함수 원형에 세미콜론을 붙인다.
함수 정의 int sum(int a, int b)
{
    return a + b;
}
함수를 만드며, 반환값의 형태, 이름, 매개변수를 표시한 후 블록 안에 함수 기능을 구현한다.
함수 호출 sum(10, 20) 함수에 필요한 값을 인수로 준다.

 


이번에 구현해 볼 도전 실전 예제에서는 일반 함수가 아닌, 재귀 함수를 사용하여 구현해야 한다.

 

재귀함수는 일반 함수와 같이 다른 함수를 호출하는 것이 아닌, 자기 자신을 호출한다는 특징을 지닌다.  

 

재귀함수의 경우 모든 명령을 수행하면 자동으로 반환하는데 반환 전에 자신을 호출하므로 처음부터 다시 시작을 한다. 따라서 정상적으로 종료하기 위해 반복을 끊을 수 있는 조건식을 반드시 포함해야 한다.

 

함수 파트의 도전 실전 예제의 문제는 아래와 같다.

 

"1부터 10까지의 합을 재귀호출을 사용한다. 1부터 일정 수까지의 합을 구하는 재귀호출함수를 만들고 호출해서 구현한다."

 

주어진 문제의 동작을 구현할 코드는 아래와 같다.

 

#include <stdio.h>

int rec_func(int n);

int main(void)
{
	int res = rec_func(10);
	printf("%d", res);
}

int rec_func(int n)
{
	if (n == 1) return n;
	else return n + rec_func(n - 1);
}

 

main 문 안에서는 rec_func 함수를 호출하여 10까지의 합을 계산한다. 

 

rec_func 함수 부분을 살펴보면 n이 1일 때 n ( = 1) 값을 반환하며, 1이 아닐 경우 n과 ( n - 1 )까지의 합을 반환한다.

 

rec_func의 결과를 저장하고 출력하기 위하여 main 문에서 정수형 res 변수를 선언해 주었다.

 

구현된 코드의 동작은 아래와 같다.

 

도전 실전 예제 결과 출력화면

728x90