Расчет числа Шредера - 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];
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д