[재귀함수]
함수가 함수내에서 자기 자신을 포출하는 구조
<구조>
리턴타입 함수명() {
명령;
명령;
함수명();
}
- 재귀함수는 무한반복처럼 계속해서 자기 자신을 호출한다.
- 무한반복은 계속해서 반복되면 정상적으로 실행되지 않으므로, 종료 조건과 함께 사용하자.
- 재귀함수도 계속해서 자신을 호출하면 정상적으로 실행되지 않으므로, 종료조건과 함계 사용하자.
- 함수 호출 시 변화량을 줄 때는, 함수에 전달할 값의 증감이 후위형으로 전달되면 안된다.
-재귀함수 작성시, 항상 함수 호출을 종료할 수 있는 조건을 사용
if(호출종료조건) {
return;
}
-----------------------------------------------------------------
<실습>재귀함수.c
재귀함수를 사용해서 다음과 같은 출력결과
void f(int x) {
if (x == 11) {
return; //함수 종료
}
printf("%d\n", x);
f(++x);
}
[출력결과]
1
2
3
4
5
6
7
8
9
10
-------------------------------------------------------------------
f2(x)
x에 전달하는 숫자만큼 1~x까지의 합을 출력
int f2(int x) {
if (x == 1) {
return 1;
}
else {
return x + f2(x - 1);
}
}
-----------------------------------------------------------------
[팩토리얼]
fact(5) = 5*fact(4)
fact(4) = 4*fact(3)
fact(3) = 3*fact(2)
fact(2) = 2*fact(1)
fact(1) = 1
int fact(int x) {
if (x == 1) {
return 1;
}
else {
return x * fact(x-1);
}
}