함수

함수는 c언어를 구성하는 단위요소 입니다.

main함수부터, 입력, 출력 함수 등 정말 많은 부분에서 활용되고 있고, 이미 우리도 많이 사용해봤습니다.

함수를 활용하면 중복되는 내용들을 줄일 수 있기 때문에, 코드의 가독성을 높힐 수 있습니다.


선언

int sum(int a, int b) {
	return a + b;
}

함수를 선언하는 방법은 변수를 선언하는 과정과 비슷합니다.

함수 설명

함수가 반환할 데이터의 타입을 함수의 타입으로 선언합니다.

함수의 이름 옆에 괄호를 열어 매개변수(Parameter)를 선언합니다.

이후 하고싶은 행동을 마치고 return우측에 반환한 데이터를 두어 반환하고 함수를 종료합니다.

만약 함수를 return으로 종료시키지 않는다면, 오류가 발생합니다.


#include<stdio.h>

int main(){
	printf("%d\n", sum(1, 2));
	return 0;
}

int sum(int a, int b) {
	return a + b;
}

반복문이나 조건문과 다르게, 함수는 메인함수 int main() 내부가 아니라, 외부에서 함수를 선언합니다.



void printHi() {
	printf("Hi\n");
	return;
}

만약 함수를 사용하며 반환할 데이터가 없다면, void데이터 타입을 활용할 수 있습니다.

다른 함수와 다르게 반환하는 데이터가 없기 때문에, return 우측에 데이터 없이 함수를 종료할 수 있습니다.

void 타입의 함수는 굳이 return이 없어도 함수의 오류가 없습니다.


#include<stdio.h>

int sum(int a, int b);

int main(){
	printf("%d\n", sum(1, 2));
	return 0;
}

int sum(int a, int b) {
	return a + b;
}

함수를 활용하기 위해서는, main 함수 이전에 한 번 선언을 미리 해 줄 필요가 있습니다.

컴퓨터는 코드를 위에서 부터 아래로 읽기 때문에, 먼저 알려주지 못하면 알지 못하게 때문이죠.

함수를 활용하기 위한 방식 동일하게 먼저 선언하시면 됩니다.


호출

int main(){
	int sum = sum(1, 3);

	...
}

함수를 사용하는 것을 호출이라고 합니다.

함수를 호출하면, 반횐되는 데이터를 활용할 수 있는데, 이를 활용하지 않아도, 에러는 발생하지 않습니다.

함수의 호출은 함수가 먼저 선언이 되어있다면 어느곳에서도 호출이 가능합니다.


매개변수 (Parameter)

(int a, int b)

함수가 활용할 데이터를 변수의 형식으로 주는 변수를 매개변수라고 합니다.

매개변수는 함수 선언시 함수 이름 우측 괄호에서 원하는 데이터 타입, 원하는 이름, 원하는 겟수만큼 선언할 수 있습니다.

원하는 방식으로 매개변수를 설정하고 함수를 호출할 때 생성한 방식에 맞추어 사용해야 합니다.

만약 데이터 타입이나 매개변수의 갯수가 설정된 것과 다르다면, 오류가 발생합니다.


매개변수는 해당 변수를 함수에서 활용하는 것이라 아니라, ‘데이터’를 함수에서 활용하는 것 입니다.

매개변수를 수정해도 변수는 수정되지 않습니다.


반환 (Return)

return a + b;

함수를 종료함과 동시에, 데이터를 원하는 방식으로 전달하는것을 반환이라 합니다

함수를 호출할 때, 함수의 데이터 타입에 맞추어 함수를 숫자를 활용하는 것 처럼 활용할 수 있는데, 이때 이 데이터는 봔환되는 데이터를 사용합니다.

printf("%d\n",sum(1, 3));


재귀함수 (Recursion)

void printHello(int num){
	if (num > 0) return;
	else {
		printf("Hello %d\n", num);
		printHello(num - 1);
	}
}

함수 내부에서 자기자신(함수)를 호출하는 함수를 재귀함수라 합니다.

재귀함수는 알고리즘 등 여러 분야에서 유용하게 활용되고 있습니다.

재귀함수는 반복문과 유사하게 표현할 수 있습니다. 동일하게, 반복문도 재귀함수로 표현할 수 있습니다.

때문에, 재귀함수로 반복문처럼 무한루프에 걸릴 수 있어, 사용에 주의가 필요합니다.


예제

int fibo(int i) {
	if (i < 2) {
		return 0;
	} else {
		return fibo(i - 1) + fibo(i - 2);
	}
}

i 번째 피보나치 수열을 계산하는 함수입니다.

이전에 이미 한 번 계산했던 데이터도 처음부터 다시 계산하는 방식입니다.

수가 커질수록 연산 횟수가 많아지기 때문에, 연산시간이 오래 걸리는 방식입니다.

이런 문제점은 동적 프로그래밍 방식을 통해 해결이 가능합니다.

자세한 내용은 나중에 더 설명하도록 하겠습니다.

int fat(int i) {
	if (i > 1)
		return fat(i - 1) * i; 
	else 
		return 1
}

팩토리얼 계산을 위한 재귀귀수 예제입니다.

1이 나오기 전까지 재귀함수를 통해 계속 i - 1i를 곱하며 값을 찾아가는 함수입니다.



💡 지적 환영합니다

Comments