Расчет числа Шредера - C#

Узнай цену своей работы

Формулировка задачи:

Получается посчитать только до 18-го числа последовательности, нужно до 1000 Вот код:
private ulong Schroder(int n) {
            if (n == 0)
                return 1;
            ulong s1 = Schroder(n - 1);
            ulong s = 0;
            for (int i = 0; i <= n - 1; i++)
            {
                s += Schroder(i) * Schroder(n - 1 - i);
            }
            return s + s1;
 }
Так считается число Шредера

Решение задачи: «Расчет числа Шредера»

textual
Листинг программы
class Schroder
{
    object sync = new object();
    List<BigInteger> cache;
 
    public Schroder(int Capacity = 10000)
    {
        cache = new List<BigInteger>(Capacity) { 1 };
    }
 
    BigInteger Next()
    {
        int n = cache.Count;
        var r = cache[n - 1];
        for (int i = 0; i < n; i++)
            r += cache[i] * cache[n - 1 - i];
 
        return r;
    }
 
    public BigInteger Calc(int n, IProgress<int> Progress = null)
    {
        lock (sync)
        {
            int from = cache.Count;
            for (int i = from; i <= n; i++)
            {
                cache.Add(Next());
                Progress?.Report((int)(100f * (i + 1 - from) / (n + 1 - from)));
            }
 
            return cache[n];
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы