一,问题:打印n行的“杨辉三角”
二,思路:
(1)经过观察,每一列的关系都满足“二项式系数”,如从上到下有:
第一列:c(0,0),c(0,1), c(0,2)......
第二列:c(1,1),c(1,2),c(1,3)......
第三列:c(2,2),c(2,3),c(2,4)......
由此看来这不仅有列非关系,还有行的关系!!!
(2)行的关系:通过观察,不难发现,每一行所打印个数都是等于列数的!!!
(3)为了实现行与列的关系,可以用双for语句来实现:
for (int i = 0; i < n; i++)//i表示层数,相当于k
{
for (int j = 0; j <= i; j++)//j表示列数,相当于n
{
C(j, i);
printf("%d ", C(j, i));
}
printf("\n");
}
(4)那问题就只剩下如何实现“二项式系数”,那就要从一个数学公式来实现:
c(k,n)=c(k-1,n-1)+c(k,n-1)
这也是“递归”的表达式了,其实就是让其多次嵌套自身函数,得到我们想要的答案;
int C(int k, int n)
{
if (k == 0||k==n)
{
return 1;
}
else
{
return C(k - 1, n - 1) + C(k, n - 1);
}
}
接下来的实现便迎刃而解了
三,代码加运行:
#include<stdio.h>
int C(int k, int n);
int C(int k, int n)
{
if (k == 0 || k == n)
{
return 1;
}
else
{
return C(k - 1, n - 1) + C(k, n - 1);
}
}
int main()
{
int n;
printf("请输入层数:");
scanf_s("%d", &n);
for (int i = 0; i < n; i++)//i表示层数,相当于k
{
for (int j = 0; j <= i; j++)//j表示列数,相当于n
{
C(j, i);
printf("%d ", C(j, i));
}
printf("\n");
}
return 0;
}