Saltar al contenido

Uso de la recursividad en C#

Si encuentras algún detalle que no comprendes puedes dejarlo en los comentarios y te responderemos lo mas rápido que podamos.

Solución:

La cantidad de veces que podrá recurrir dependerá de:

  • El tamaño de la pila (que suele ser de 1 MB IIRC, pero el binario se puede editar a mano; no recomendaría hacerlo)
  • ¿Cuánto stack usa cada nivel de la recursividad (un método con 10 no capturados)? Guid las variables locales se apilarán más que un método que no tiene variables locales, por ejemplo)
  • El JIT que está utilizando, a veces el JIT voluntad use recursividad de cola, otras veces no lo hará. Las reglas son complicadas y no puedo recordarlas. (Hay una publicación de blog de David Broman de 2007 y una página de MSDN del mismo autor/fecha, pero es posible que ya no estén actualizadas).

¿Cómo evitar los desbordamientos de pila? No recurra demasiado 🙂 Si no puede estar razonablemente seguro de que su recursión terminará sin ir muy lejos (me preocuparía “más de 10” aunque eso es muy seguro), entonces reescríbalo para evitar la recursión.

Realmente depende del algoritmo recursivo que estés usando. Si se trata de una recursividad simple, puedes hacer algo como esto:

public int CalculateSomethingRecursively(int someNumber)

    return doSomethingRecursively(someNumber, 0);


private int doSomethingRecursively(int someNumber, int level)

Vale la pena señalar que este enfoque solo es útil cuando el nivel de recursividad se puede definir como un límite lógico. En el caso de que esto no pueda ocurrir (como un algoritmo divide y vencerás), tendrás que decidir cómo deseas equilibrar la simplicidad frente al rendimiento frente a las limitaciones de recursos. En estos casos, es posible que deba cambiar entre métodos una vez que alcance un límite predefinido arbitrario. Un medio efectivo de hacer esto que he usado en el algoritmo de clasificación rápida es hacerlo como una proporción del tamaño total de la lista. En este caso, el límite lógico es el resultado de cuando las condiciones ya no son óptimas.

No estoy enterada de nada conjunto duro para evitar desbordamientos de pila. Yo personalmente trato de asegurar –
1. Tengo mis casos base correctos.
2. El código llega al caso base en algún momento.

Reseñas y valoraciones del tutorial

Si aceptas, puedes dejar un ensayo acerca de qué le añadirías a este tutorial.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *