杨辉三角(pascal triangle)打印

目标

        命令行输入杨辉三角的行数m,居中打印杨辉三角

例:

注:这里的居中是指以首行的数字1为中心对齐 


杨辉三角的性质

数学性质:

                文字表述:每个数字等于上一行的左右两个数字之和

                数学符号:C(n+1, i) = C(n, i) + C(n, i-1)

                图像表示:

非居中排列所以是:上一行 同列与前一列的和
此图非居中排列所以是:上一行 同列与前一列 之和

 注:杨辉三角还有非常多,有趣的数学性质,读者可自行探索。这里只简要介绍了代码所需的数学性质


 代码实现

  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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值