@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,...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект