본문으로 바로가기

데이터와 작업의 모듈화 - 3.함수

category Education/정보과학 2019. 6. 25. 02:29

함수의 정의 및 사용

함수(function)는 어떤 상황에 필요한 작업들을 하나로 묶어 정의하고 편리하게 불러 사용할 수 있는 모듈화 구조입니다. 반복적인 작업이 많이 이루어 지거나 어떤 목표를 위한 작업을 추상적으로 정의하여 간단하게 문제를 다룰때 사용합니다.

 

int sum(int a, int b) //자료형 함수이름(변수1, 변수2, ··· )
{
	return a+b; // 전달 받은 변수 a 와 b의 합을 반환하며 복귀합니다.
}

int main()
{
	printf(sum(2,3)); //printf 함수 내에서 미리 정의한 sum 함수를 호출하고 값을 반환받습니다.
}

 

함수에는 4가지 형태가 존재합니다.

 

함수를 정의할때 void를 사용하면 함수가 호출된 후 복귀할때 호출했던 위치로 값을 반환 하지 않는 다는 의미입니다.

void를 제외한 int, float, double은 그 자료형의 값을 반환하며 복귀합니다.

 

return에는 2가지의 의미가 있습니다. return; 으로 작성할 경우 함수를 호출했던 위치로 복귀한다는 의미이고,  return 값; 은 호출했던 위치로 값을 반환하며 복귀한다는 의미입니다.

 

재귀 함수

재귀 함수(recursive fuction)은 함수의 정의에서 자기 자신을 호출하는 형태의 함수입니다.

재귀 함수를 꽤나 정확하게 설명하고 있는 이미지 입니다.

재귀 함수에는 하향식 재귀(문제를 쪼개 나가는 형태) 상향식 재귀(다음 상태로 키워 가는 형태) 의 2가지 형태로 구분됩니다.

#include<stdio.h>

int f1(int k) // 하향식 재귀함수, 1~k 까지의 합을 구하는 함수입니다.
{
    if(k==1) return 1;
    return k+f(k-1);
}

int n = 5;
int f2(int k) // 상향식 재귀함수, k~n 까지의 합을 구하는 함수입니다.
{
    if(k == n) return n;
    return k + f(k + 1);
}

int main()
{
    printf(f1(5)); // f1(a) = a + f(a-1)
    // f1(5) = 5 + f1(4)
    //             f1(4) = 4 + f1(3)
    //                         f1(3) = 3 + f1(2)
    //                                     f1(2) = 2 + f1(1) = 1
    // 5 + 4 + 3 + 2 + 1 = 15
    
    printf(f2(1)); //f2(a) = a + f2(a+1)
    // f2(1) = 1 + f2(2)
    //             f2(2) = 2 + f2(3)
    //                         f2(3) = 3 + f2(4)
    //                                     f2(4) = 4 + f2(5) = 5
    // 1 + 2 + 3 + 4 + 5 = 15
    
}

f1 함수는 하향식 재귀 함수이며 f2 함수는 상향식 재귀 함수입니다.