Расчет числа Шредера - 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];
}
}
}