Pergunta

Ao escrever código VC++ com qualidade de produção, o uso de recursão é aceitável?Por que ou por que não?

Foi útil?

Solução

Existe uma maneira de determinar em que ponto eu encontraria um estouro de pilha?

Na verdade.Um estouro de pilha acontece quando você esgota o espaço da pilha - no entanto...

  • O tamanho inicial da pilha pode ser alterado programaticamente e pode assumir valores diferentes dependendo do seu sistema operacional/compilador/etc.
  • Quanto dele já foi usado depende do que seu aplicativo (e das bibliotecas que ele usa) fez anteriormente - isso geralmente é impossível de prever
  • Quanto da pilha cada chamada requer depende do que você faz em sua função.Se você alocar apenas, digamos, 1 número inteiro na pilha, poderá recorrer a uma quantidade enorme de vezes, mas se estiver alocando um buffer de 200k na pilha, nem tanto.

As únicas vezes que acertei um foi em um loop infinito ou usando o buffer de 200k mencionado anteriormente.

Acho muito mais preferível que meu aplicativo simplesmente trave do que fazer um loop para sempre usando 100% da CPU e ter que ser eliminado à força (este é um PITA correto em um servidor remoto por meio de uma conexão ruim, pois o Windows não possui SSH)

Uma orientação aproximada:Você acha que é provável que sua função recursiva se chame mais de 10.000 vezes consecutivas?Ou você está fazendo algo idiota como alocar buffers de 200 mil na pilha?

Se sim, preocupe-se com isso.
Se não, continue com coisas mais importantes.

Outras dicas

Sim.Mas nunca em código morto.Isso seria bobagem.

Claro - por ex.se você quiser percorrer uma estrutura de árvore, o que mais você usaria?

Talvez você queira ter algo como uma profundidade máxima para ter certeza de não estar escrevendo um loop infinito.(se isso faz sentido no seu exemplo)

Existe uma maneira de determinar em que ponto eu encontraria um estouro de pilha?

Depende da profundidade que você vai e do tamanho da recursão real.Presumo que você entenda o que a recursão faz?

A recursão é quase essencial para percorrer estruturas de arquivos como pastas/diretórios.

Atravessar uma estrutura semelhante a uma árvore é muito fácil se a recursão for usada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top