프로그래밍 언어/C언어

재귀함수란 무엇인가

원원 2019. 6. 9. 22:11

안녕하세요. 오늘은 C언어 재귀함수에 대해 알아보겠습니다


재귀함수란 자기자신을 다시 호출하는 함수를 의미합니다


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
 
void re(void)
{
    printf("re함수 실행 \n");
    re();
}
 
int main(void)
{
    re();
}


re함수안에서 re함수 자기자신을 호출하고있습니다

"re함수 실행" 이라는 문장이 무한히 나오게 됩니다.. 그래서 함수가 끝나는 조건도 있어야 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
 
int re(int i)
{
    printf("re함수 실행 %d \n",i);
    i--;
    if(i == 0)
        return 0;
    re(i);
    
}
 
int main(void)
{
    re(10);
}

이런식으로 코드를 작성하면

re(10) -> re(9)-> ....->re(1)

이런식으로 함수가 실행되게됩니다

re(1)일때 i가 0이되므로 re(1)함수가 끝나게 되고 나머지 함수들도 끝나게 됩니다




재귀함수를 이용하면 팩토리얼을 구하는 함수를 만들 수 있습니다

팩토리얼이란 n! = n*(n-1)*(n-2)*....2*1이 됩니다

그래서 위에서 한 예제를보면 10을 전달인자로 넘겼을때 10,9,...1 이 출력됬는데 이걸 다 곱하면 됩니다

Colored By Color Scripter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
 
int re(int i)
{
    int fac=1;
    printf("re함수 실행 %d \n",i);
    if(i == 0)
        return 1;
        
    fac = i * re(i-1);
    return fac;
}
 
int main(void)
{
    printf("10!값 : %d \n",re(10));
}


re(10) -> re(9)-> ....->re(1)->re(0) 이 순서로 호출되고

re(0)일때 리턴값으로 1을 넘겨줍니다

그럼 re(1)함수에서 fac = 1*re(1-1)이므로 fac는 1이되고 1을 리턴합니다

그럼 re(2)함수에서 fac = 2*re(2-1)이므로 fac는 2이되고 2를 리턴합니다

그럼 re(3)함수에서 fac = 3*re(3-1)이므로 fac는 6이되고 6을 리턴합니다

.

.

.

이런식으로 하면 10!가 나오게 됩니다