对于这样的一个图案我们要进行打印杨辉三角形,那么在这个时间点相信我们已经学过了函数的递归和数组的使用;
针对这个图形我们会观察到 第i行的第j列的元素他等于第i-1行的第j-1个元素和第j个元素之和
那么想到这里我们就会考虑使用一个二维数组来实现这段代码
#include<stdio.h>
int main()
{
int arr[100][100];
int n, i = 0, j = 0;
scanf("%d", &n);
for (i = 0;i < n;i++) {
for (j = 0;j <= i; j++) {
if (i == 0 || j == 0 || i == j) arr[i][j] = 1;
else arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (i = 0;i < n;i++) {
for (j = 0;j <= i; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
那么我们也同样学习了递归函数,所以我们尝试着用递归来书写一下,那么不妨让我们先来看一下这段代码,接下来我会为大家逐一解释;
#include <stdio.h>
// 递归函数计算杨辉三角形的特定值
int pascal(int row, int col) {
if (col == 0 || col == row) {
// 基本情况:边缘的值都是1
return 1;
}
else {
// 递归调用:计算上一行的两个值的和
return pascal(row - 1, col - 1) + pascal(row - 1, col);
}
}
// 主函数
int main() {
int n, i, j;
printf("请输入杨辉三角形的行数: ");
scanf("%d", &n);
// 打印杨辉三角形
for (i = 0; i < n; i++) {
for (j = 0; j <= i; j++) {
printf("%d ", pascal(i, j));
}
printf("\n");
}
return 0;
}
我们先来看主函数部分在这部分我们使用两个循环,外层循环控制行数,内存循环控制列数。其中对于每一行来说其其列数等于其行数,所以在这里我们给出一个循环条件就是就j<=i;所以我们每次调用这个pascal函数的时候都会返回一个值打印在屏幕上,所以我们给pascal函数两个变量i,j分别代表他的行和列;
接下来我们就进入了pascal函数体的部分,在这一部分 如果我们是在第一列或者最后一列的话我们就打印1,如果不是的话我们就进入循环的递归调用,这一行要返回的数值就等于上一行的前一个,和上一行正对着的这个数字之和,所以这样我们就利用函数的递归调用实现了杨辉三角形的打印