Pascal三角形


作者:bakari   時間:2012.8.4

 

Pascal三角形又稱楊輝三角形,是多項式系數的一種規律展示,最早是由我國數學家楊輝發現,比Pascal早200多年。

下面簡單地總結一些其算法。

一、數組計算法:

1、公式推導:

這個很簡單,看圖就知道

由圖可得公式: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 }

見圖:

 

OK!希望多多燒香!  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM