2010-05-22 6 views
3

C에서 재귀 적 정적 함수를 작성할 수 있습니까?정적 함수에서 재귀가 가능합니까?

+1

왜 안 되니? static은 funcions이 파일에 대해 로컬임을 의미합니다. – Anton

+1

당신은 그것이 가능해서는 안되는 이유는 무엇입니까? 왜 그냥 시험해 보지 않으시겠습니까? – helpermethod

+1

가까운 투표가 필요한 이유는 무엇입니까? 이것은 나에게 꽤 직설적 인 것처럼 보입니다. 나는 여기서 가장 밝은 사람이 될 수는 없습니다. 다시 투표하려면 투표하십시오. – paxdiablo

답변

3

예, 그렇습니다.

13

예. 함수에 static을 적용하면 재귀 함수 ()에있는 정적 변수와 다릅니다.

전자는 컴파일 링 장치 외부에서 함수를 볼 수 있는지 여부 만 제어합니다 (예 : 링커의 경우).

후자는 재귀 수준 당 하나가 아닌 모든 재귀 수준에 대해 변수의 복사본이 하나만 있다는 것을 의미합니다. 이는 일반적으로 필요한 것입니다.

그래서 :

static unsigned int fact (unsigned int n) { 
    if (n == 1U) return 1; 
    return n * fact (n-1); 
} 

은 괜찮지 만 : 정적 변수가 손상되기 때문에

static unsigned int fact (unsigned int n) { 
    static unsigned int local_n; // would be fine if not static! 
    local_n = n; 
    if (local_n == 1U) return 1; 
    return local_n * fact (local_n-1); 
} 

하지입니다.

3
#include <stdio.h> 

static void count_to_five(void) 
{ 
    static int i = 0; 

    while (i < 5) { 
    i++; 
    printf("%d\n", i); 
    count_to_five(); 
    } 

    puts("You are seeing this because I counted to five! (did not enter loop)\n");  
    return; 
} 

int main(void) 
{ 
    count_to_five(); 
    return 0; 
} 

그렇습니다. i의 정적 저장소는 각 호출이 count_to_five() 인 경우 해당 값을 유지한다는 것을 의미합니다. 그러나 count_to_five()static으로 정의 할 필요가 없습니다.

당신이 무엇을 요구하는지 알기가 매우 어렵습니다.

관련 문제