C언어 재귀함수

프로그래밍/C 2019.02.24 댓글 Plorence
재귀 함수(Recursion Function)

재귀함수는 자기 자신을 다시 호출하는 함수를 의미합니다.
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
void helloworld (int num){
    if(num <= 0){
        return;
    }
    printf("hello world! %d \n",num);
    helloworld(num-1);
}
int main (void){
    helloworld(3);
    return 0;
}
위에 예제를 실행시키면 
인자 3을 매개변수 num에다가 전달하고고, 다시 자신을 호출시키고 인자를 매개변수 num값에 -1한 정수값을 전달합니다.
재귀함수전에 조건문으로 0같거나 그 이하가 되면 함수를 종료시킵니다. 
만약 무조건 다시 함수호출하면 무한 재귀 함수에 빠지게 됩니다.
그래서 재귀 함수로 만든다면 반드시 탈출 가능하게 짜야 합니다.

재귀함수의 디자인 사례
재귀함수의 특징을 가지고 팩토리얼 값을 반환하는 코드를 만들수 있습니다.
!5 (5 * 4 * 3 * 2 * 1) 곱한거에서 -1을해서 다시곱하고 1을만날때까지 계속 반복합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int factorial (int num){
    if(num == 0){
        return 1;
    }
    else{
        return num * factorial(num-1); //재귀함수로 인해  매개변수 num이 0이될때까지 재귀함수 호출
    }
}
int main (void){
    printf("4! = %d \n",factorial(4));
    return 0;
}
팩토리얼 말고도 DFS 알고리즘에도 쓰입니다.

단점
자기 자신을 계속 호출하니 호출시에 생성되는 변수때문에 메모리의 사용량이 증가합니다.
반복문,재귀 함수의 속도차이는 https://nowonbun.tistory.com/232?category=507116 여기서 확인하세요.

정리하자면 나 자신을 호출 하는 함수는 재귀 함수입니다.


댓글