-11

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

例子:

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

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

          1
         1  1
       1   2   1

...应该是2。

4

5 回答 5

8

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

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

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

于 2013-03-24T17:50:17.880 回答
3

使用 Armen 方程实现帕斯卡三角形的递归代码将如下所示:

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 *(i-j) / (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);
    }
  }
}
于 2014-02-26T11:56:45.310 回答
1

Combinations 中有一个公式可以计算出帕斯卡三角形中任何位置的值:

它通常是这样调用n choose k和编写的:

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

表示法: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

于 2018-05-03T22:22:47.823 回答
0
for row in range(10):
print('{: ^45}'.format(' '.join(str(pascal(row, col)) for col in range(row+1))))

使用上面的代码打印出你的帕斯卡三角形,从而修改代码。前 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         
于 2016-11-16T03:11:11.693 回答
0

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

    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];
    }
于 2018-01-28T13:39:14.340 回答