Я преобразовал псевдокод здесь в C # и рекурсивно повторил его 10000 раз.Но я получаю ошибку во время выполнения C #, StackOverflow Exception
после 9217
раз.Как я могу предотвратить это?
РЕДАКТИРОВАТЬ Если это кому-нибудь поможет, вот код:
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
РЕДАКТИРОВАТЬ2 Так что, кажется, все согласны с тем, чтомне нужно преобразовать это в итеративный ... кто-нибудь может дать код?Я не могу написать какой-либо итеративный код, который работает ...
EDIT Спасибо Полу Рику за этот ответ, который я протестировал, и он работает:
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;
}