본문 바로가기

공부/C언어

(C 예제) 재귀 함수

함수안에서 자기자신을 호출하는 방식을 재귀호출(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));
}