Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
{
if (m > n / 2)
m = n - m;
unsigned a = 1, b = 1;
for (int i = n; i >= n - m + 1; -- i)
a *= i;
for (int i = 1; i <= m; ++ i)
b *= i;
return a / b;
}
Нетрудно заметить, что этот алгоритм быстро приводит к выходу значений числителя или знаменателя за пределы диапазона значений типа данных unsigned. И действительно, эксперименты с этим вариантом функции показывают, что точное вычисление биномиальных коэффициентов возможно только при n < 17.
Найдем следующее соотношение:
.
То есть:
.
Тогда справедливо следующее рекуррентное соотношение, позволяющее вычислять очередное значение биномиального коэффициента через его предыдущее значение:
приm = 0 приm > 0 |
Это рекуррентное соотношение реализуется с помощью следующей рекурсивной функции:
Дата публикования: 2014-11-28; Прочитано: 185 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!