Интересный вопрос от Я! Как решить проблему неправильных монет?
Предположим, что мы бросили n-1 монет и получили какое-то количество единиц (орлов). Бросаем следующую монету (n). Если выпадет ноль (решка), то количество единиц не изменится, и чётность останется той же. Если выпадет единица, то чётность изменится.
Poddn = Poddn-1*P0n + Pevenn-1*P1n
Pevenn = Pevenn-1*P0n + Poddn-1*P1n
Но, поскольку события Pevenn и Poddn образуют полный набор вариантов (либо чёт, либо нечет), то Pevenn + Poddn = 1.
Аналогично, P0n + P1n = 1.
Отсюда, Poddn = Poddn-1*(1-P1n) + (1-Poddn-1)*P1nvar Podd = 0;
var Peven = 1;
for (var i = 1; i <= 100; i++) {
  P1 = 1 / (2 * i + 1);
//  P0 = 1 - P1;
//  Po = Podd * P0 + Peven * P1;
//  Peven = Podd * P1 + Peven * P0;
//  Podd = Po;
// Всё, что выше, ужимается в
  Podd = Podd * (1 - P1) + (1 - Podd) * P1;
}
console.log(Podd);
// 0.49751243781094556
Орёлс, решкас... Стыдно-с лепить горбатого.from fractions import Fraction


def foo(n):
    a, b = Fraction(1), Fraction(0)
    for i in range(n * 2, 0, -2):
        a, b = (a * i + b) / (i + 1), (a + b * i) / (i + 1),
    return b


print(foo(1))
print(foo(100))Мое решение, рАвно как и ответ, претендуют на правильность, да-да-да )