C++实现①给出n阶杨辉三角形的递推关系式;②输出左右对称的n(n≤20)阶等腰数字三角形。
时间: 2024-09-18 13:12:16 浏览: 89
在C++中,我们可以利用递归和动态规划的方式来实现这两个需求。
① 杨辉三角形(Pascal's Triangle)是一个经典的数学问题,它的每一行代表二项式的展开系数。对于n阶杨辉三角形,其递推关系可以用下面的形式表示:
- 第一行有1个元素:`T(1, k) = 1` (k从0到0)
- 对于任意的行i > 1,第j个元素 `T(i, j)` 是上一行第j-1个和第j个元素之和:`T(i, j) = T(i - 1, j - 1) + T(i - 1, j)` (j从1到i)
这是一个典型的动态规划问题,可以使用一个二维数组来存储每个位置的值。
```cpp
int fibonacci(int n, int m) {
if (m == 0) return 1;
if (m == 1 || n == 1) return 1;
else return fibonacci(n - 1, m - 1) + fibonacci(n - 1, m);
}
```
其中,`fibonacci(n, m)` 可以视为 `T(n, m)` 的计算函数。
② 输出左右对称的n阶等腰数字三角形,也称为帕斯卡金字塔(Pascal Pyramid),这种图形可以通过累加和来构建,每层的数字是对角线方向的前一层的数字之和,例如1、4、6、4、1。
```cpp
void printPyramid(int n) {
vector<vector<int>> pyramid(n, vector<int>(n));
pyramid[0][0] = pyramid[n - 1][n - 1] = 1;
for (int i = 1; i < n; ++i) {
pyramid[i][0] = pyramid[i - 1][i];
pyramid[i][i] = 1;
for (int j = 1; j < i; ++j)
pyramid[i][j] = pyramid[i - 1][j - 1] + pyramid[i - 1][j];
}
// 打印三角形
for (const auto &row : pyramid) {
for (int num : row) {
cout << num << " ";
}
cout << "\n";
}
}
```
阅读全文