/* 1 2 3 4 5 6
1 1
2 1 1
3 1 2 1
4 1 3 3 1
5 1 4 6 4 1
6 1 5 10 10 5 1
通过观察以上可知,杨辉三角第一行只有一个数为1
第二行则有两个数也分别为1
第三行开始,如果不是第一列或者行数等于列数的情况,则是相应的i行j列的数等于i-1行j-1列的数与i-1行j列的数之和
由此可想到递归,即自身调用自身的情况
*/
#include<stdio.h>
int returnNum(int i,int j)//设置一个数,用来返回杨辉三角各个位置所存放的数
{
if(j==0||i==j)//如果是第一列或者行数和列数相等,则返回1
return 1;
else
return returnNum(i-1,j-1)+returnNum(i-1,j);//这里体现了递归寻找杨辉三角的数
}
int main(void)
{
int n;
int **num;
scanf("%d",&n);
num=(int **)malloc(sizeof(int *)*n);
for(int i=0;i<n;i++)
num[i]=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)//每个数的列数都不能超过行数
{
num[i][j]=returnNum(i,j);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
printf("%5d",num[i][j]);
}
printf("\n");
}
return 0;
}