Domanda

Quando si scrive codice VC++ di qualità di produzione, l'uso della ricorsione è accettabile?Perché o perché no?

È stato utile?

Soluzione

C'è un modo per determinare a che punto riscontrerei un overflow dello stack?

Non proprio.Un overflow dello stack si verifica quando esaurisci lo spazio dello stack, tuttavia...

  • La dimensione dello stack iniziale può essere modificata in modo programmatico e può avere valori diversi per impostazione predefinita a seconda del sistema operativo/compilatore/ecc
  • La quantità di esso già utilizzata dipende da ciò che la tua app (e le librerie utilizzate dalla tua app) ha fatto in precedenza: questo è spesso impossibile da prevedere
  • La quantità di stack richiesta da ciascuna chiamata dipende da ciò che fai nella tua funzione.Se assegni, ad esempio, solo 1 intero nello stack, potresti essere in grado di ricorrere a un numero enorme di volte, ma se stai allocando un buffer di 200k nello stack, non così tanto.

Le uniche volte in cui ne ho colpito uno è stato in un ciclo infinito o utilizzando il suddetto buffer da 200k.

Trovo molto più preferibile che la mia app si blocchi semplicemente, piuttosto che vada in loop per sempre utilizzando la CPU al 100% e debba essere uccisa con la forza (questo è un vero PITA su un server remoto su una cattiva connessione poiché Windows non dispone di SSH)

Una linea guida approssimativa:Pensi che la tua funzione ricorsiva possa richiamare se stessa più di 10.000 volte consecutivamente?O stai facendo qualcosa di stupido come allocare 200k buffer sullo stack?

Se sì, preoccupati.
Se no, continua con cose più importanti.

Altri suggerimenti

SÌ.Ma mai in codice morto.Sarebbe sciocco.

Certo, ad es.se volessi attraversare una struttura ad albero cos'altro utilizzeresti?

Forse ti piacerebbe avere qualcosa come una profondità massima per essere sicuro di non scrivere un ciclo infinito.(se questo ha senso nel tuo esempio)

C'è un modo per determinare a che punto incontrerei uno stack overflow?

Dipende da quanto vai in profondità e da quanto è grande la ricorsione effettiva.Immagino che tu capisca cosa fa la ricorsione?

La ricorsione è quasi essenziale per attraversare strutture di file come cartelle/directory.

Attraversare una struttura ad albero è molto semplice se si utilizza la ricorsione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top