Путаница с биномиальным коэффициентом Python

#python

Вопрос:

Итак, мы только что познакомились с loops, и я целыми днями чесал голову, пытаясь понять это. Я пытаюсь распечатать треугольник Паскаля. Я нашел в Интернете простой код, который я действительно могу понять!

 rows = int(input("Enter the number of rows : "))
for i in range(0, rows):
    coff = 1
    for j in range(1, rows-i):
        print("  ", end="")
    
    for k in range(0, i 1):
        print("  ", coff, end="")
        coff = int(coff * (i - k) / (k   1))
    print() 

Однако, как они получили эту формулу? coff = int(coff * (i - k) / (k 1)) ,
Я искал в Интернете, как они это выяснили, но до сих пор не могу найти никаких ответов.
Я понимаю, как работает петля, но я чешу голову о том, как они получили формулу, чтобы получить условия. Помощь приветствуется!

Комментарии:

1. Это биномиальные коэффициенты . Нетривиальным фактом является то, что они в точности совпадают с числами в треугольнике Паскаля. Доказательство того, что это так, является типичным примером доказательства по индукции, используемого в курсах дискретной математики. В любом случае, почему бы не написать свой собственный ответ, который вы действительно понимаете, вместо того, чтобы искать в Интернете решения для вашей домашней работы? Гораздо лучший опыт обучения, когда вы разбираетесь во всем самостоятельно.

2. Привет, да! Я знаю, что это биномиальные коэффициенты, но я просто не был уверен, как он получил эту формулу, так как формула обычно факторизуется: (n!/ k!(n-k))! Этот код действительно ближе всего к тому, что я знаю до сих пор, просто использование циклов и арифметических операций. Я просто был озадачен тем, что код выводит точный биномиальный коэффициент, в то время как я все еще не нашел в Интернете ничего, что бы это объясняло.

3. Кроме того, я также пытался использовать вложенные циклы, чтобы получить факториал каждого компонента формулы (n!/k!(n-k)!), поэтому я получаю n!, k! и (n-k)! и просто объедините их все вместе, используя переменные. Но мой код работает не так, как должен, и я путаюсь со значениями индексов, потому что пытаюсь вывести его в виде треугольника.

4. Мне просто действительно нужно понять, как было выведено уравнение

5. Используя падающие факториалы, вы можете записать n choose k как произведение k факторов в числителе и k в знаменателе. При переходе от n choose k к n choose (k 1) вам понадобится 1 дополнительный множитель в числителе и 1 в знаменателе. Эти факторы образуют числитель и знаменатель коэффициента, на который вы умножаете. Но … зачем делать это для треугольника Паскаля? Если вам нужен весь треугольник, просто сложите пары последовательных чисел в одну строку вместе, чтобы получить следующий.

Ответ №1:

Для каждой позиции в треугольнике Паскаля значение равно i Choose k , где i находится строка (начиная с 0 в первой строке) и k позиция в строке (также начиная с 0). i и k здесь (почти) совпадает с переменными в вашем коде.

Теперь Википедия демонстрирует эту идентичность:

введите описание изображения здесь

Хитрость для преобразования этого в ваш код заключается в том, что coff = int(coff * (i - k) / (k 1)) выполняется после coff печати, поэтому нам нужно добавить 1 к k . Если вы хотите, чтобы код был ближе к формуле, вы можете сделать следующее:

 coff = 1
for k in range(1, i 2):
    print("  ", coff, end="")
    coff = int(coff * (i   1 - k) / k)