문제

프로덕션 품질의 VC++ 코드를 작성할 때 재귀 사용이 허용됩니까?그 이유는 무엇?

도움이 되었습니까?

해결책

스택 오버플로가 발생할 지점을 확인할 수 있는 방법이 있습니까?

설마.스택 공간을 모두 소모하면 스택 오버플로가 발생합니다. 그러나...

  • 초기 스택 크기는 프로그래밍 방식으로 변경될 수 있으며 OS/컴파일러 등에 따라 기본값이 다를 수 있습니다.
  • 이미 사용된 데이터의 양은 앱(및 앱에서 사용하는 라이브러리)이 이전에 수행한 작업에 따라 달라집니다. 이는 예측이 불가능한 경우가 많습니다.
  • 각 호출에 필요한 스택의 양은 함수에서 수행하는 작업에 따라 다릅니다.스택에 1개의 정수만 할당하는 경우 엄청난 양의 반복이 가능할 수 있지만 스택에 200k 버퍼를 할당하는 경우에는 그렇게 많지 않습니다.

내가 한 번 이상 부딪힌 유일한 경우는 무한 루프에 있거나 앞서 언급한 200k 버퍼를 사용하는 경우입니다.

내 앱이 100% CPU를 사용하여 영원히 반복되어 강제로 종료되는 것보다 그냥 충돌하는 것이 훨씬 더 바람직하다고 생각합니다. (Windows에 SSH가 부족하므로 연결이 좋지 않은 원격 서버의 올바른 PITA입니다.)

대략적인 지침:귀하의 재귀 함수가 자신을 10,000번 이상 연속적으로 호출할 가능성이 있다고 생각하십니까?아니면 스택에 200,000개의 버퍼를 할당하는 것과 같은 어리석은 일을 하고 있습니까?

그렇다면 걱정하십시오.
그렇지 않다면 더 중요한 일을 계속하십시오.

다른 팁

예.하지만 절대 데드 코드에서는 사용하지 마세요.그것은 어리석은 일입니다.

물론이죠. 예를 들어트리 구조를 탐색하고 싶다면 또 무엇을 사용하시겠습니까?

어쩌면 무한 루프를 작성하지 않도록 최대 깊이와 같은 것을 원할 수도 있습니다.(귀하의 예에서 이것이 의미가 있다면)

스택 오버플로를 만날 지 결정할 수있는 방법이 있습니까?

얼마나 깊이 들어가고 실제 재귀가 얼마나 큰지에 따라 다릅니다.재귀가 무엇인지 이해하셨나요?

폴더/디렉토리와 같은 파일 구조를 탐색하려면 재귀가 거의 필수적입니다.

재귀를 사용하면 구조와 같은 트리를 순회하는 것이 매우 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top