두 개의 클래스 함수가 있습니다. 첫 번째 클래스 함수는 파일을 엽니 다. 그런 다음 파일에 쓰고 재귀 적으로 자체를 호출하는 두 번째 함수를 호출합니다. 두 번째 함수가 끝나면 원래 함수가 파일을 닫습니다.재귀 함수가 C++로 파일에 쓸 수 있습니까?
가능합니까?
두 개의 클래스 함수가 있습니다. 첫 번째 클래스 함수는 파일을 엽니 다. 그런 다음 파일에 쓰고 재귀 적으로 자체를 호출하는 두 번째 함수를 호출합니다. 두 번째 함수가 끝나면 원래 함수가 파일을 닫습니다.재귀 함수가 C++로 파일에 쓸 수 있습니까?
가능합니까?
물론, 같은 당신이 재귀 함수에 파일 핸들/개체를 전달할 같이
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);
}
코드 샘플 +1 – Bill
나는 레벨을 거꾸로하는 편을 선호한다. 이렇게하면 호출자는'recursion (100, os) '을보고 100 단계 깊이 재귀한다는 것을 알 수 있습니다. 'recursion (0, os)'를 보는 것보다 유익하고 100 - 0 = 100 레벨을 재귀한다는 것을 알아야합니다. 하지만 그건 나 뿐이야. –
@ChrisLutz - 발신자가 재발까지의 거리를 결정할 수있는 아이디어를 좋아합니다. 나는 사실 데이터를 maxdepth와 분리하여 어떻게 독립적 일 수 있는지 보여 주었다. (이 장난감 예제는 데이터가 실제로 카운터 인 반면 실제 예제에서는 다른 것이 될 수 있기 때문이다.) –
예, 가능합니다.
예. C++이나 파일 시스템에서는 아무 것도하지 않을 것입니다.
예, 재귀 함수가 기본 대문자 인 경우 종료됩니다.
func2(int p) {
if (p == 0) return;
//write
func2(--p);
}
func() {
//open file
func2(10);
//close file
}
'func2 (p -)'에서 후행 감소를 사용하고 있으므로이 func2가 호출 된 것과 동일한 값을 가진 다음 func2를 호출하므로 재귀가 결코 종료되지 않습니다. 'func2 (-p)'또는'func2 (p-1)'을 할 필요가있다. –
내가 재귀 적 (i -) 또는 재귀 적 (- i)을 선호했던 이유가 있었다. 그거였다. @R Samuel이 맞습니다. 여러분이 제공 한 코드는 영속적으로 반복됩니다 (또는 컴파일러가 최적화하지 않으면 스택 오버플로가 발생할 때까지). a) 다시'p' 값을 필요로하지 않기 때문에'--'를 사용할 이유가 없기 때문에'func2 (p - 1)'을 선호합니다. 그리고''p -' '를 사용할 위험이 없습니다. 'p -'가 원래 값인'p'를 반환하지만, 영원히 재귀를 일으키더라도 작동하도록 기대합니다. –
그렇습니다. 쓰기 호출은 해당 시퀀스가 반복적으로 정의 되더라도 시퀀스가되기 때문에 가능합니다. 파일 객체는 관계없이 쓰기 호출의 선형 serise 만 볼 수 있습니다.
예. – GManNickG
왜 그렇게되지 않을까요? –
예. 무슨 문제 있니? –