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