본문 바로가기

컴퓨터 언어/C

재귀함수

배운내용 정리

재귀함수란, 자기 자신의 정의 속 자신이 다시 포함되어 있는 함수를 말한다. 강의에서는 학교를 예로 들었다.

학교 (배울 학, 학교 (배울 학, 학교 ...) 교) 이런 식으로 자신의 뜻이 무한대로 포함이 되어있다.

재귀함수를 이용할 수 있는 예로 팩토리얼을 배웠다.

int factorial(int n) {
	if (n == 1) return 1;
	return n * factorial(n - 1);
}

int main() {
	printf("%d\n", factorial(10));
}

n을 매개변수로 해서 n!을 리턴하는 코드를 짜보았다.

factorial 함수 안에 factorial 함수를 써서 재귀함수를 만들었다.

void printArr(int (*arr)[3]) {
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 3; j++) {
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
}
int main() {
	int arr[2][3] = { {1,2,3},{4,5,6} }
	printArr(arr);
}

Call by reference 방식을 이용해서 배열 재귀함수도 만들었는데, 이 부분은 익숙하지 않아서인지 좀 더 연습이 필요한 것 같다.

 

1. 재귀함수를 또 어디에 적용할 수 있는 지 궁금하다.

재귀함수를 이용해서 특정 문장을 반복 출력할 수 있다. 1부터 N까지의 합계를 출력할 수도 있고, 피보나치 수열을 구할 수 있다. 배열에서 최대값을 찾을 수도 있다. 이 중 피보나치 수열을 구해보고 싶어서 코드를 짜보았다.

#include <stdio.h>

int fib(int n) {
	if (n == 1 || n == 2) return 1;
	else {
		return fib(n - 1) + fib(n - 2);
	}
}
int main() {
	int f = fib(20);
	printf("%d", f);
	return 0;
}

 

'컴퓨터 언어 > C' 카테고리의 다른 글

상수 만들기  (0) 2022.03.10
Typedef와 구조체  (0) 2022.02.28
프로토타입  (0) 2022.02.28
함수의 반환  (0) 2022.02.28
배열과 포인터  (0) 2021.09.08