#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)