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