Pascal三角形

作者:bakari   时间:2012.8.4

 

Pascal三角形又称杨辉三角形,是多项式系数的一种规律展示,最早是由我国数学家杨辉发现,比Pascal早200多年。

下面简单地总结一些其算法。

一、数组计算法:

1、公式推导:

这个很简单,看图就知道

Pascal三角形

由图可得公式:a[ i ][ j ] = a[i - 1] [j - 1] + a[i - 1][ j ] 

2、代码展示:

 1 void YangHuiTriangleArray(int Row)                           

 2 {

 3     for (int i = 0;i < Row; i++)

 4     {

 5         for (int j = 0;j <= i; j++)

 6         {

 7             if (j == 0 || j == i)  //置1条件

 8                 a[i][j] = 1;

 9             else 

10                 a[i][j] = a[i - 1][j - 1] + a[i - 1][j];

11             cout<<a[i][j]<<" ";

12         }

13         cout<<endl;

14     }

15 }

二、递归法

这个是最好想到的,这一步的实现需要上一步作为铺垫。

废话不多说,直接来看代码

 1 long GetElement(int Row,int Col)

 2 {

 3     if (0 == Col || Row == Col)   //递归出口

 4         return 1;

 5     else 

 6         return GetElement(Row - 1,Col - 1) + GetElement(Row - 1,Col);

 7 }

 8 

 9 void YangHuiTriangleRecur(const long n)

10 {

11     for(int i = 0;i < n; i++)

12     {

13         for(int j = 0; j <= i; j++)

14             cout<<GetElement(i,j)<<" ";

15         cout<<endl;

16     }

17 }

三、数学推导法

本方法主要借助数学推导,比起前两种性能要好很多

令X10= 1 ;则

X20 = 1 , X21 = X20 * (2 - 1 + 1)/1 = 2 , X22 = X21 * (2 - 2 + 1)/2 = 1;

X30 = 1 , X31 = X30 * (3 - 1 + 1)/1 = 3 , X32 = X31 * (3 - 2 + 1)/2 = 3 , X33 = X32 * (3 - 3 + 1)/3 = 1;

.........

Xij = 1, Xij+1 = Xij * (i - j + 1)/j , ...... , Xii = 1;

 

大体就是这么个推导法,下面看代码:

 1 void YangHuiTriangle(int RowN)

 2 {

 3     for (int i = 0;i < RowN;i++)

 4     {

 5         for (int j = 0;j <= i;j++)

 6         {

 7             if (j == 0)        //第一个数前面要输出相应的空格

 8             {

 9                 for (int k = 1;k < RowN - i; k++)

10                     cout<<"  ";

11             }

12             else 

13                 cout<<" ";                          //数与数之间输出相应空格  

14             printf("%3d",ComputeNextInteger(i,j));  //输出下一个数

15         }

16         cout<<endl;

17     }

18 }

19 

20 int ComputeNextInteger(int iRow ,int iRowIndex)

21 {

22     long p = 1;

23     for (int i = 1;i <= iRowIndex; i++)    

24         p = p * (iRow - i + 1)/i;            //根据公式计算每一个数;

25     return p;

26 }

见图:

Pascal三角形

 

OK!希望多多烧香!  

你可能感兴趣的:(pascal)