함수는 자기 자신을 호출하는 것도 가능합니다.


예를 먼저 보자면,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
 
long factorial(int n);
 
int main()
{
    int n = 0;
 
    printf("정수를 입력하시오");
    scanf("%d"&n);
    printf("%d!은 %d입니다. \n", n, factorial(n));
    return 0;
}
 
long factorial(int n)
{
    printf("factorial(%d)\n", n);
 
    if (n <= 1)
    {
        return 1;
    }
    else
    {
        return n * factorial(n - 1);
    }
}
cs

순환 함수의 예입니다.

factorial은 n*(n-1)! 의 식을 이용해서 구할수 있는데요. 자기 자신인 n을 이용하여 함수를 순환적으로 호출되어서 n이 1이하일때 중지되어서 값을 구할 수 있습니다.


순환 함수는 순환을 멈추기위한 식과, 순활 호출을 하는 부분으로 나눕니다. 순환을 멈추기위한 식이 존재하지않으면 호출시에 -까지 넘어가버리고 무한루푸또는 에러를 낼것입니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#include <stdio.h>
 
void hanoi_tower(int n, char from, char tmp, char to);
 
int main()
{
    hanot_tower(10'A''B''C');
}
 
void hanoi_tower(int n, char from, char tmp, char to)
{
    if (n==1)
    {
        printf("판 1을 %c에서 %c으로 옮긴다.\n", from, to);
    }
    else
    {
        hanoi_tower(n - 1, from, to, tmp);
        printf("원판 %d을 %c에서 %c으로 옮긴다..\n", n, from, to);
        hanoi_tower(n - 1, tmp, from, to);
    }
}
 
 
 
 
 
 
cs

순환의 파워를 가장 극명하게 보여주는 예제입니다. 순환 함수를 이용하여 10개의 원판을 옮기는 방법이 빠르게 나옵니다.