Исключение времени выполнения, слишком глубокая рекурсия

Я преобразовал псевдокод здесь в 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;
    }

8
задан Community 23 May 2017 в 12:29
поделиться