함수안에서 자기자신을 호출하는 방식을 재귀호출(recursive call)이라고 한다.
자기자신을 재호출하는 형태로 정의된 함수를 재귀함수라고 한다.
//대충
#include <stdio.h>
void a(void)
{
printf("recursive function\n");
a();
}
void main(void)
{
a();
}
대충 이런 느낌이다. 물론 저대로 컴파일 하면 오버플로우 된다.
탈출조건이 있는 재귀함수
// 탈출조건이 있는 재귀함수
#include <stdio.h>
void Recursive(int num)
{
if (num <= 0)
return; //재귀 탈출
printf("recursive function %d \n", num);
Recursive(num-1);
}
void main(void)
{
Recursive(3);
}
재귀하면 빠질 수 없는 팩토리얼 예제
// 팩토리얼
#include <stdio.h>
int Factorial(int num)
{
if (num == 0)
return 1;
else
return num * Factorial(num - 1);
}
int main(void)
{
printf("1! = %d\n", Factorial(1));
printf("2! = %d\n", Factorial(2));
printf("3! = %d\n", Factorial(3));
printf("4! = %d\n", Factorial(4));
printf("5! = %d\n", Factorial(5));
}
재귀하면 빠질 수 없는 피보나치 예제
#include <stdio.h>
int Fibonacci(int num)
{
if (num == 1 || num == 2)
return 1;
else
return Fibonacci(num - 1) + Fibonacci(num - 2);
}
void main(void)
{
int num = 0;
printf("알고 싶은 피보나치 수 입력: ");
scanf("%d", &num);
printf("%d번째 피보나치 수는 %d입니다.", num, Fibonacci(num));
}
'공부 > C언어' 카테고리의 다른 글
(C 예제) 배열 예제(암호 전달/크기 순으로 정렬/절대값 순으로 정렬) (0) | 2020.06.26 |
---|---|
(C 예제) 배열 정의 및 예제 (0) | 2020.06.26 |
(C 예제) 함수 정리 및 예제, static 변수 (0) | 2020.06.25 |
(C 예제) 로또 번호 출력하기/가위바위보 및 응용 (0) | 2020.06.23 |
(C 예제) 알파벳 하나 입력받고 그 다음 문자 출력하기/무작위 정수 10개 생성 (0) | 2020.06.23 |