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

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

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

Получается посчитать только до 18-го числа последовательности, нужно до 1000 Вот код:
Листинг программы
  1. private ulong Schroder(int n) {
  2. if (n == 0)
  3. return 1;
  4. ulong s1 = Schroder(n - 1);
  5. ulong s = 0;
  6. for (int i = 0; i <= n - 1; i++)
  7. {
  8. s += Schroder(i) * Schroder(n - 1 - i);
  9. }
  10. return s + s1;
  11. }
Так считается число Шредера

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

textual
Листинг программы
  1. class Schroder
  2. {
  3.     object sync = new object();
  4.     List<BigInteger> cache;
  5.  
  6.     public Schroder(int Capacity = 10000)
  7.     {
  8.         cache = new List<BigInteger>(Capacity) { 1 };
  9.     }
  10.  
  11.     BigInteger Next()
  12.     {
  13.         int n = cache.Count;
  14.         var r = cache[n - 1];
  15.         for (int i = 0; i < n; i++)
  16.             r += cache[i] * cache[n - 1 - i];
  17.  
  18.         return r;
  19.     }
  20.  
  21.     public BigInteger Calc(int n, IProgress<int> Progress = null)
  22.     {
  23.         lock (sync)
  24.         {
  25.             int from = cache.Count;
  26.             for (int i = from; i <= n; i++)
  27.             {
  28.                 cache.Add(Next());
  29.                 Progress?.Report((int)(100f * (i + 1 - from) / (n + 1 - from)));
  30.             }
  31.  
  32.             return cache[n];
  33.         }
  34.     }
  35. }

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


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

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

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы