如何计算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。
上述就是C#学习教程:如何计算Pascal三角形中给定行和列的数字?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
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]; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013081.html