如何计算Pascal三角形中给定行和列的数字?

我正在尝试创建一个函数,给定行和列,将计算Pascal三角形中该位置的值。

例:

val = GetPasVal(3, 2); // returns 2 

所以我在这里指定第3行第2列,如您所见:

  1 1 1 1 2 1 

……应该是2。

Pascal三角形包含二项式系数 C(n,k); 有一个非常方便的递归公式

 C(n, k) = C(n-1, k-1) + C(n-1, k) 

您可以使用此公式计算二项式系数。

使用Armen的等式实现pascals三角形的递归代码如下所示:

 using System; using System.Collections.Generic; public class Program { public void Main() { for(int i =0 ; i<5;i++) { int sum = 1; Console.WriteLine(); for(int j =0 ; j<=i;j++) { Console.Write(pascal(i,j)); //Console.Write(sum); //print without recursion sum= sum *(ij) / (j + 1); } } } public int pascal(int x, int y) { if((x+1)==1 || (y+1)==1 || x==y) { return 1; } else { return pascal(x-1,y-1)+ pascal(x-1,y); } } } 
 for row in range(10): print('{: ^45}'.format(' '.join(str(pascal(row, col)) for col in range(row+1)))) 

使用上面的代码打印出你的pascal三角形,从而修改代码。 前10个应该是这样的:

  1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 

组合中有一个公式用于计算Pascal三角形中任何位置的值:

它通常被称为n choose k并且写成如下:

 n choose k = n! / k!(nk)! 

符号: n choose k也可以写成C(n,k)nCk

 static void Main(string[] args) { var x = GetPasVal(3, 2); Console.WriteLine(x); } public static long GetPasVal(int row, int col) { int factOfRow = 1,i; for(i = 1;i<=(row - 1);i++) factOfRow *= i; int factOfRowMinusCol = 1; for(i = 1;i<=(row - 1)- (col - 1);i++)//check out below link to understand condition factOfRowMinusCol *= i; int factOfCol = 1; for(i = 1;i<= (col - 1);i++) factOfCol *=i; int fact = factOfRow / (factOfCol * factOfRowMinusCol); return fact; } 

https://www.mathsisfun.com/pascals-triangle.html

GetPasVal方法将计算Pascal三角形中的所有数字,直到您将给出的点(高度),之后该方法将返回该行(宽度)上的索引值。 这是你可以使用的东西。 这很简单。 你只需要使用锯齿状arrays。

  static void Main(string[] args) { var x = GetPasVal(3, 2); Console.WriteLine(x); } public static long GetPasVal(int height, int width) { long[][] triangle = new long[height][]; for (int i = 0; i < height; i++) { triangle[i] = new long[i + 1]; triangle[i][0] = 1; triangle[i][i] = 1; if (i >= 2) { for (int j = 1; j < i; j++) { triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; } } } return triangle[height - 1][width - 1]; }