배운내용 정리
재귀함수란, 자기 자신의 정의 속 자신이 다시 포함되어 있는 함수를 말한다. 강의에서는 학교를 예로 들었다.
학교 (배울 학, 학교 (배울 학, 학교 ...) 교) 이런 식으로 자신의 뜻이 무한대로 포함이 되어있다.
재귀함수를 이용할 수 있는 예로 팩토리얼을 배웠다.
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;
}