编程小白,碰到一道题,感到很迷,求助

图片说明

每行前输入的空格数让我很迷,找不出规律,求助

public class Triangle {
    //main function
    public static void main(String[] args){
        Triangle p=new Triangle();
        p.printTri(5);
        p.printTri(20);
        p.printTri(10);
        p.printTri(17);

    }

    //print function
    public void printTri(int n) {   
        int i=0,j=2*n-1;
        for (;j-i>=1;i++,j--) {
            for (int k=0;k<2*n-1;k++) {
                if(i<=k&&k<j)
                    System.out.print("*");
                else
                    System.out.print(" ");
            }
            System.out.println();
        }
    }
}

图片说明

有规律
代码如下:

#include<stdio.h>

int main()
{
    int i,j,k;
    for(i=5; i>0; i--)
    {
        for(k=5;k>i;k--)
            printf("%c",' ');
        for(j=1; j<=2*i-1; j++)
            printf("%c",'*');
        printf("\n");
    }
}

图片说明
‘*’的个数刚好符合 2*i-1 (1<=i<=5)
空格的个数符合5-i个 (1<=i<=5)

第一行输出的‘#’数目:2*n-1;
第n行左侧输出的空格数目:n;

请输入倒三角层数:8
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;
    int t=0;
    printf("请输入倒三角层数:");
    scanf("%d",&n);
    while(n>0)
   {
    for(int j=0;j<t;j++)
        printf(" ");
        t++;
    for(int i=0;i<2*n-1;i++)
        printf("#");
        n--;
    printf("\n");}
    return 0;
}
###############
 #############
  ###########
   #########
    #######
     #####
      ###
       #

可以采用递归的方法来做,我博客中有文章详细解释的,欢迎浏览