Биномиальный коэффициент - PullRequest
0 голосов
/ 11 ноября 2010

Я искал, пытаясь найти простой алгоритм биномиальных коэффициентов, но безрезультатно.Проблема в том, что язык, который я использую для занятий, немного ... странный.Многие из них используют Yacc и Lex.

В любом случае мы сделали пример в классе:

n=12; p=1; i=1;
while (i <= n) {
        p = p * i;
        print p;
        i = i + 1;
};

Это был пример вычисления факториалов, но теперь мне нужно изменить его, чтобыв состоянии вычислить C (n, k) или N выбрать K (он же биномиальный коэффициент), но я не знаю, насколько сложно это сделать.Мы можем выбрать любые N и K (пользователь не должен вводить их), поэтому будут работать любые случайные 2 числа (как в примере выше).Я уверен, что этот код поддерживает только базовые функции, такие как циклы while и базовая математика, поэтому я не думаю, что использование факториала возможно ... но я полагаю, что я мог бы использовать приведенный выше код как таковой?

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

Поскольку я предполагаю, что это домашняя работа, я не собираюсь предлагать решение.Я скажу следующее:

Существует формула для C (n, k), которая основывается на делении, вычитании, умножении и факториале:

n!/(k!(n-k)!)

У вас уже есть код, который можетрассчитайте факториал, и похоже, что используемый вами язык поддерживает другие математические операторы, которые вам нужны.

Итак, все, что вам нужно сделать, - это вычислить три факториала: один для n, один для kодин для n-k.

0 голосов
/ 06 мая 2011

Вы всегда можете использовать библиотеку Boost, если вам нужен плагин lib, чтобы выполнить эту работу за вас: http://www.boost.org/doc/libs/1_35_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/factorials/sf_binomial.html

...