Биномиальный коэффициент

Я оглядывался, пытаясь найти простой алгоритм биномиального коэффициента, но безрезультатно. Проблема в том, что язык, который я использую для занятий, немного... странный. Многие из них используют 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 и базовую математику, поэтому я не думаю, что использование факториала возможно... но я полагаю, что мог бы использовать приведенный выше код как таковой?

Есть идеи?


person Community    schedule 11.11.2010    source источник
comment
Никто не может ответить вам со 100% уверенностью, если язык, который вы используете, неизвестен.   -  person Bart Kiers    schedule 11.11.2010
comment
@Niki: Тег домашнего задания... теперь не рекомендуется, но, @Mercfh, пожалуйста (как всегда) следите за общие рекомендации: укажите любые особые ограничения, покажите, что вы пробовали до сих пор, и спросите, что именно сбивает с толку. ты.   -  person    schedule 12.11.2010
comment
@Roger - спасибо за информацию!   -  person Niki Yoshiuchi    schedule 13.11.2010


Ответы (2)


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

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

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

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

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

person Niki Yoshiuchi    schedule 11.11.2010
comment
Это имеет смысл, и на самом деле это не домашнее задание, а пример упражнения из класса. - person ; 11.11.2010

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

person Mike Caron    schedule 06.05.2011