Хорошо, давайте посмотрим.
Фактическая формула является внутренней для цикла:
for(x=0;x<=q;++x)
{
if((x==0)||(q==0))
bin=1;
else
bin=(bin*(q-x+1))/x;
printf("%6d",bin);
}
q представляет строку паскальского треугольника, начинающуюся сверху.
х представляет номер элемента в строке. Поскольку в строке 1 будет 1 элемент, в строке 2 два элемента.
Так что for(x=0;x<=q;++x)
имеет смысл.
теперь к условию if if((x==0)||(q==0))
. Если х равен 0, то мы находимся с левой стороны треугольника или начала строки треугольника, которая всегда равна 1. Если q равно 0, то, конечно, это первая строка треугольника (начинающаяся сверху), которая также всегда 1. Так как есть только один элемент.
Теперь перейдем к предложению else, которое, вероятно, является наиболее интересной частью:
else
bin=(bin*(q-x+1))/x;
Первый раз, когда мы входим в это предложение, после того, как q было 0 и x было 0 в начале цикла и было установлено в 1. Это важно, поскольку bin был определен вне цикла for и сохраняет значение от итерация к итерации. Итак, теперь x равно 2, а bin равно 1. Снова q представляет номер строки и длину строки. Чтобы понять это, вы должны взглянуть на страницу википедии треугольника Паскаля . Особенно часть с
Расчет отдельной строки или
диагональ сама по себе
там вы найдете формулу, записанную снова. Важное слово здесь - факториалы. Также может быть полезна статья о матрице Паскаля 1022 *.
Я постараюсь объяснить это, но (я ненавижу, когда кто-то говорит это), вы должны это увидеть. Взгляните на диагонали паскальского треугольника и на внутреннюю часть формулы (q-x+1)
. Теперь вычислите значения, которые вы всегда получите для каждой диагонали. Вы видите образец? Я надеюсь, что теперь все начинает обретать смысл.