杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623—-1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。
算法一:递归
//函数_计算杨辉三角第(n,r)个数
long combi2(int n, int r) {//n代表行数,r代表列数
long res;
if (n == 1 && r == 1)//设定第一行第一列数为1
res = 1;
else if (r == 0||r>n)//设定杨辉三角周边为0
res = 0;
else res = combi2(n - 1, r) + combi2(n - 1, r - 1);
return res;
}
算法二:数列规律
定义每一行为数列{1,a[1],a[2],……,a[r-1]}
r[x]=r[x-1]*(n-x)/x
口语化:每一行第k个数=前一个数×(行数-k)/k
//函数_计算杨辉三角第(n,r)个数
long combi(int n, int r) {//n为行数,r为列数
int i;
long p = 1;
if (r != 1) {//数列推算排除每行第一个数1
for (i = 1; i < r; i++)
p = p * (n - i) / i;
}
return p;
}
函数:打印杨辉三角
void YangHuiTrangle(int n) {
for (int i = 1; i <= n; i++) {//控制行数
for (int j = 1; j <= n-i; j++)
cout << " ";//第一个数前的空格
for (int r = 1; r <= i; r++)//依次打印每一行的每个数
cout << setw(3) << combi(i, r) << " ";
cout << endl;
}
}
调用函数实现打印n行杨辉三角
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
YangHuiTrangle(12);
}
杨辉三角还有许多特殊的性质,如三角数列、方形数列、斐波那契数列等,之后可以研究一下利用这些性质输出。