目标
命令行输入杨辉三角的行数m,居中打印杨辉三角
例:
注:这里的居中是指以首行的数字1为中心对齐
杨辉三角的性质
数学性质:
文字表述:每个数字等于上一行的左右两个数字之和
数学符号:C(n+1, i) = C(n, i) + C(n, i-1)
图像表示:
![非居中排列所以是:上一行 同列与前一列的和](https://img-blog.csdnimg.cn/direct/1104305a5d4c4e1a8ed4c91326bc7630.png)
注:杨辉三角还有非常多,有趣的数学性质,读者可自行探索。这里只简要介绍了代码所需的数学性质
代码实现
1 #include <stdio.h>
2 int recursion_fun(int i, int j); // 函数声明
3
4 int main()
5 {
6 int n; // 需要展示的行数n
7 int i; // 行数i
8 int j; // 列数j
9
10 scanf("%d",&n); // scanf函数输入变量n的值
11 for(i=1;i<=n;i++)
12 {
13 int num=n-i; // 每行前面的空格数量是递减的,最后一行没有空格
14
15 for(int m=1; m<=num; m++ )
16 {
17 printf(" "); // 这里用两个空格,后面就用-4(占四个右对齐)
18 }
19 for(j=1;j<=i;j++) // 赋值
20 {
21 printf("%-4d",recursion_fun(i,j));
22 }
23 printf("\n");
24 }
25 }
26
27 int recursion_fun(int i, int j) // 递归函数
28 {
29 if(j==1||i==j) // 杨辉三角两边数字为1
30 {
31 return 1;
32 }
33 else
34 {
35 return(recursion_fun(i-1,j-1)+recursion_fun(i-1,j));
36 }
37 }
递归原理:
递归就是套娃,看图多想想就理解了
递归什么时候结束?遇到return!其实就是我们设置的if条件满足的时候
本题中就是遇到杨辉三角两边数字1
27 int recursion_fun(int i, int j) // 递归函数
28 {
29 if(j==1||i==j) // 杨辉三角两边数字为1
30 {
31 return 1;
32 }
33 else
34 {
35 return(recursion_fun(i-1,j-1)+recursion_fun(i-1,j));
36 }
37 }
本文终生更新
——————gtc_evaluation