使用C++,①给出n阶杨辉三角形的递推关系式;②输出左右对称的n(n≤20)阶等腰数字三角形。
时间: 2024-09-25 11:14:33 浏览: 60
在C++中,我们可以利用递归和动态规划的方式来实现n阶杨辉三角形和等腰数字三角形。
① 杨辉三角形(Pascal's Triangle)是一个数学术语,它的每一行代表二项式系数,其递推关系可以用下面的公式表示:
对于第i行(从0开始计数),第j个元素(同样从0开始计数)是上一行(i-1行)的第j个和第j+1个元素之和,记作C(i-1, j-1) + C(i-1, j),其中C(n, k)是组合数,表示从n个不同元素中取k个元素的组合数目。初始两行是1,其余都是前一行相应位置元素之和。
```cpp
int binomial(int n, int k) {
if (k == 0 || k == n)
return 1;
else
return binomial(n - 1, k - 1) + binomial(n - 1, k);
}
void printPascalTriangle(int n) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
cout << binomial(i, j) << " ";
}
cout << "\n";
}
}
```
② 对于左右对称的等腰数字三角形,例如:
```
*
* *
* *
* *
```
每个元素通常是它所在行的索引值,即`i`(从0开始)。由于对称性,只需计算到中心位置即可。我们可以使用嵌套循环,外层控制行数,内层控制列数,并将元素打印出来。
```cpp
void printSymmetricTriangle(int n) {
for (int i = 0; i <= n; ++i) {
// 打印中心行
for (int j = abs(n - i); j > 0; --j) {
cout << j << " ";
}
cout << endl;
// 如果还有剩余行,打印两侧
if (i < n) {
for (int j = 1; j <= i; ++j) {
cout << j << " ";
}
cout << endl;
}
}
}
```
阅读全文