@snapoak
Junior frontend developer

Как работает этот рекурсивный алгоритм?

Здравствуйте!
Алгоритм подсчета бинома, как я понимаю, по формуле Бернули.
61d6dc43c5129742215868.png
Также он использует рекурентную формулу нахождения кол-ва сочетаний
61d6dc7204063978128686.png
Сам алгоритм:
public double binomial1(int N, int k, double p) {
        if (N == 0 && k == 0) return 1.0;
        if (N < 0 || k < 0) return 0.0;
        return (1.0 - p) *binomial1(N-1, k, p) + p*binomial1(N-1, k-1, p);
    }


Вопросы:
Как так получается, что у нас (1.0 - p) и p в рекурентном выражении без степеней? Ведь по формуле Бернули должны быть. Я понимаю, что там в рекурсии, видимо, они несколько раз сами на себя умножаются, но распутать клубок не могу?
Есть ли какие-то методы для анализа подобных алгоритмов/формул, и для создания этих формул. Как-то ведь до написания подобного кода люди доходят?

Сам код взял из книги Седжвика по алгоритмам, начал проходить курс на coursera.
  • Вопрос задан
  • 376 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Myclass
А вы понимаете слово степень?
Ведь это просто n-ое кол-во раз число умножается на себя. И первая часть до плюса это и воспроизводит. Вторая часть после плюса есть и есть тот плюс из формулы.
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Подобные алгоритмы легко анализируются и распутываются, когда начинаешь вручную подставлять значения. 0, 1, 2,...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы