2010-02-10 6 views
1

두 개의 클래스 함수가 ​​있습니다. 첫 번째 클래스 함수는 파일을 엽니 다. 그런 다음 파일에 쓰고 재귀 적으로 자체를 호출하는 두 번째 함수를 호출합니다. 두 번째 함수가 끝나면 원래 함수가 파일을 닫습니다.재귀 함수가 C++로 파일에 쓸 수 있습니까?

가능합니까?

+7

예. – GManNickG

+3

왜 그렇게되지 않을까요? –

+1

예. 무슨 문제 있니? –

답변

8

물론, 같은 당신이 재귀 함수에 파일 핸들/개체를 전달할 같이

void recursion(int data, int maxdepth, ostream &os) 
{ 
    // must eventually break out 
    if (maxdepth == 0) 
     return; 

    // write data 
    os << data << std::endl; 

    // and call one deeper 
    recursion(data + 1, maxdepth - 1, os); 
} 

void start(const char *filename) 
{ 
    std::ofstream os(filename); 

    recursion(0, 100, os); 
} 
+0

코드 샘플 +1 – Bill

+2

나는 레벨을 거꾸로하는 편을 선호한다. 이렇게하면 호출자는'recursion (100, os) '을보고 100 단계 깊이 재귀한다는 것을 알 수 있습니다. 'recursion (0, os)'를 보는 것보다 유익하고 100 - 0 = 100 레벨을 재귀한다는 것을 알아야합니다. 하지만 그건 나 뿐이야. –

+3

@ChrisLutz - 발신자가 재발까지의 거리를 결정할 수있는 아이디어를 좋아합니다. 나는 사실 데이터를 maxdepth와 분리하여 어떻게 독립적 일 수 있는지 보여 주었다. (이 장난감 예제는 데이터가 실제로 카운터 인 반면 실제 예제에서는 다른 것이 될 수 있기 때문이다.) –

1

예. C++이나 파일 시스템에서는 아무 것도하지 않을 것입니다.

5

예, 재귀 함수가 기본 대문자 인 경우 종료됩니다.

func2(int p) { 
    if (p == 0) return; 
    //write 
    func2(--p); 
} 

func() { 
    //open file 
    func2(10); 
    //close file 
} 
+4

'func2 (p -)'에서 후행 감소를 사용하고 있으므로이 func2가 호출 된 것과 동일한 값을 가진 다음 func2를 호출하므로 재귀가 결코 종료되지 않습니다. 'func2 (-p)'또는'func2 (p-1)'을 할 필요가있다. –

+0

내가 재귀 적 (i -) 또는 재귀 적 (- i)을 선호했던 이유가 있었다. 그거였다. @R Samuel이 맞습니다. 여러분이 제공 한 코드는 영속적으로 반복됩니다 (또는 컴파일러가 최적화하지 않으면 스택 오버플로가 발생할 때까지). a) 다시'p' 값을 필요로하지 않기 때문에'--'를 사용할 이유가 없기 때문에'func2 (p - 1)'을 선호합니다. 그리고''p -' '를 사용할 위험이 없습니다. 'p -'가 원래 값인'p'를 반환하지만, 영원히 재귀를 일으키더라도 작동하도록 기대합니다. –

3

그렇습니다. 쓰기 호출은 해당 시퀀스가 ​​반복적으로 정의 되더라도 시퀀스가되기 때문에 가능합니다. 파일 객체는 관계없이 쓰기 호출의 선형 serise 만 볼 수 있습니다.

관련 문제