
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
Необходимо вычислить выражение
res = !n - !(n-1) + !(n-2) - ... Вот код который я написал: ![]() ![]() private static int Calculate(int n) { if (n < 0) throw new ArgumentException("Input parameter can't be less then zero", "n"); int currentFact = n % 2 == 0 ? 1 : -1; int currSumm = currentFact; for (int i = 1; i <= n; i++) { currentFact *= i * (-1); currSumm += currentFact; } return currSumm; } Возможно ли его еще оптимизировать? |
Сообщ.
#2
,
|
|
|
Да факториал от отрицательных тоже существует, всетаки это Гама ф-ия.
Так что обработку исключения можно убрать. А каков ваш алгоритм? напишите словами. |
Сообщ.
#3
,
|
|
|
Цитата 2005fs @ Возможно ли его еще оптимизировать? Разве что таблицей |
Сообщ.
#4
,
|
|
|
Можно это выражение считать приблизительно. Если n! вынести за скобки, то в скобках останется знакопеременный ряд очень быстро убывающий. То есть достаточно вычислять два - три члена этого ряда.
|
Сообщ.
#5
,
|
|
|
Возьмем ряд тейллора найдем наиболее похожую из известные функций ch(x) и sh(x)
![]() ![]() Ясно что нам нужно ch(x)- sh(x)=e^(-x) ![]() возьмем x=1 чтобы в числителях получить 1^n=1 Возьмем первые n элементов приведём к одному знаменателю n! получим (!n - !(n-1) + !(n-2) ..)/!n И того e^(-1)*n! ![]() Возможно надо точнее опраксимировать факториал, но для cкорости возьмем эту формулу sqrt(2*pi*n)*(n/e)^n/e=sqrt(2*Pi*n)*power(n,n)/power(e,n+1) |