Pregunta

Al escribir código VC++ con calidad de producción, ¿es aceptable el uso de la recursividad?¿Por qué o por qué no?

¿Fue útil?

Solución

¿Hay alguna manera de determinar en qué punto me encontraría con un desbordamiento de pila?

No precisamente.Se produce un desbordamiento de pila cuando se agota el espacio de la pila; sin embargo...

  • El tamaño de la pila inicial se puede cambiar mediante programación y puede tener valores predeterminados diferentes dependiendo de su sistema operativo/compilador/etc.
  • La cantidad que ya se ha consumido depende de lo que su aplicación (y las bibliotecas que utiliza) haya hecho anteriormente; esto a menudo es imposible de predecir.
  • La cantidad de pila que requiere cada llamada depende de lo que haga en su función.Si solo asigna, digamos, 1 número entero en la pila, es posible que pueda recurrir una enorme cantidad de veces, pero si asigna un búfer de 200k en la pila, no tanto.

Las únicas veces que he alcanzado uno es en un bucle infinito o usando el búfer de 200k antes mencionado.

Me parece mucho más preferible que mi aplicación simplemente falle, que que se repita para siempre usando el 100% de la CPU y tenga que ser eliminada a la fuerza (este es un PITA correcto en un servidor remoto con una mala conexión ya que Windows carece de SSH)

Una pauta aproximada:¿Cree que es probable que su función recursiva se llame a sí misma más de 10.000 veces consecutivas?¿O estás haciendo algo tonto como asignar 200k buffers en la pila?

Si es así, preocúpate por eso.
Si no, continúa con cosas más importantes.

Otros consejos

Sí.Pero nunca en código muerto.Eso sería una tontería.

Claro, p.e.Si quieres atravesar una estructura de árbol, ¿qué más usarías?

Tal vez le gustaría tener algo así como una profundidad máxima para asegurarse de no escribir un bucle infinito.(si esto tiene sentido en su ejemplo)

¿Hay alguna manera de determinar en qué punto que me encontraría con una pila ¿Desbordamiento?

Depende de qué tan profundo sea y qué tan grande sea la recursividad real.Supongo que entiendes lo que hace la recursividad.

La recursividad es casi esencial para atravesar estructuras de archivos como carpetas/directorios.

Atravesar una estructura similar a un árbol es muy fácil si se utiliza la recursividad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top