Convertí el pseudo-código here en C#, y lo repitió recursivamente 10.000 veces. Pero recibo un error de tiempo de ejecución de C#, StackOverflow Exception
después de 9217
veces. ¿Cómo puedo prevenir esto?Excepción de tiempo de ejecución, recursión demasiado profunda
EDITAR Si se ayuda a nadie, aquí está el código:
private double CalculatePi(int maxRecursion)
{
return 2 * CalculatePi(maxRecursion, 1);
}
private double CalculatePi(int maxRecursion, int i)
{
if (i >= maxRecursion)
return 1;
return 1 + i/(2.0 * i + 1) * CalculatePi(maxRecursion, i + 1);
}
double pi = CalculatePi(10000); // 10,000 recursions
Edit2 Así que todo el mundo parece estar de acuerdo que tengo que convertir esto en iterativo ... ¿alguien puede dar un poco de código? Me parece que no puede escribir ningún código iterativo que funciona ...
EDITAR Gracias a Paul Rieck para esta respuesta, que he probado, y funciona:
private static double CalculatePi(int maxRecursion)
{
double result = 1;
for (int i = maxRecursion; i >= 1; i--)
{
result = 1 + i/(2.0 * i + 1) * result;
}
return result * 2;
}
El compilador o bien mostrar un error o advertencia durante la compilación. Obtiene una excepción _runtime_. ¿Puedes publicar los detalles de la excepción exacta? – Oded
Ah, mi mal. * fijo * – Entity
Cambia el número de iteraciones de 10000 a 51. Obtienes el mismo resultado. :) – Guffa