在屏幕上显示杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
………………………………..
【问题分析与算法设计】
杨辉三角形中的数,正是(x+y)的N次方幂展开式各项的系数。从杨辉三角形的特点出发,可以总结出:
1)第N行有N+1个值(设起始行为第0行)
2)对于第N行的第J个值:(N>=2)
当J=1或J=N+1时: 其值为1
当J!=1且J!=N+1时:其值为第N-1行的第J-1个值与第N-1行第J个值之和
将这些特点提炼成数学公式可表示为:
1)x=1或x=N+1
2)c(x,y)= c(x-1,y-1)+c(x-1,y) 这样便可以根据递归数学表达式来进行程序编写了。
【程序说明与注释】
1: #include <stdio.h>2: #define WIDTH 43:4: int c(int,int);5:6: int main(void)7: {8: int i,j,n=13;
9: printf("N=");10:11: /*控制输入正确的值以保证屏幕显示的图形正确*/
12: while(n>12) scanf("%d",&n);13:14: /*控制输出N行*/
15: for(i=0;i<=n;++i)
16: {17: //every line
18: for(j=0;j<(12-i)/2*WIDTH;j++)
19: printf(" "); /*控制输出第i行前面的空格*/20: for(j=1;j<i+2;j++)
21: printf("%4d",c(i,j)); /*输出第i行的第j个值*/22: printf("/n");23: }24: system("PAUSE");25: return 0;
26:27: }28:29: int c(int x, int y)30: {31: int z;
32: if((y==1)||(y==x+1))
33: return 1;
34: z=c(x-1,y-1)+c(x-1,y);35: return z;
36: }37:38:
输出结果
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1