재귀 함수Recursive Functions

C 프로그램의 모든 함수를 재귀적으로 호출할 수 있습니다. 즉, 함수가 자신을 호출할 수 있습니다.Any function in a C program can be called recursively; that is, it can call itself. 재귀적 호출 수는 스택의 크기로 제한됩니다.The number of recursive calls is limited to the size of the stack. 스택 크기를 설정하는 링커 옵션에 대한 자세한 내용은 /STACK(스택 할당)(/STACK) 링크 옵션을 참조하세요.See the /STACK (Stack Allocations) (/STACK) linker option for information about linker options that set stack size. 함수가 호출될 때마다 완료되지 않은 이전 호출의 값이 덮어쓰이지 않도록 새로운 저장소가 매개 변수와 autoregister 변수에 대해 할당됩니다.Each time the function is called, new storage is allocated for the parameters and for the auto and register variables so that their values in previous, unfinished calls are not overwritten. 매개 변수는 생성된 함수의 인스턴스에 의해서만 직접 액세스될 수 있습니다.Parameters are only directly accessible to the instance of the function in which they are created. 이전 매개 변수는 함수의 다음 인스턴스에 의해 직접 액세스될 수 없습니다.Previous parameters are not directly accessible to ensuing instances of the function.

static 저장소로 선언된 변수에는 재귀적 호출 시마다 새로운 저장소가 필요하지 않습니다.Note that variables declared with static storage do not require new storage with each recursive call. 해당 저장소는 프로그램 수명 동안 존재합니다.Their storage exists for the lifetime of the program. 이러한 변수에 대한 각 참조는 동일한 저장소 영역에 액세스합니다.Each reference to such a variable accesses the same storage area.

예제Example

다음 예제에서는 재귀적 호출을 보여 줍니다.This example illustrates recursive calls:

int factorial( int num );      /* Function prototype */  

int main()  
{  
    int result, number;  
    .  
    .  
    .  
    result = factorial( number );  
}  

int factorial( int num )      /* Function definition */  
{  
    .  
    .  
    .  
    if ( ( num > 0 ) || ( num <= 10 ) )  
        return( num * factorial( num - 1 ) );  
}  

참고 항목See Also

함수 호출Function Calls