/**
* @author hj
* @Description: 打印杨辉三角
*/
public class HjYhTriangle {
public static void main(String[] args) {
//打印行数,若行数>13 需要加大 空格数与数字占位数
int row = 13;
for (int i = 1; i <= row; i++) {
//打印空格,空格数是数字占位符的一半
for (int j = 1; j <= row - i; j++) {
System.out.print(" ");
}
//打印一排数值
for (int j = 1; j <= i; j++) {
// %4d 表示数字占4个位
System.out.printf("%4d", recursionFun(i, j));
}
//换行
System.out.println();
}
System.out.println();
System.out.println();
directFun(13);
System.out.println();
System.out.println();
//打印行数,若行数>20 需要加大 空格数与数字占位数
directFun(20);
}
/**
* 递归调用方法
*
* @param num1 参数1
* @param num2 参数2
* @return int
*/
private static int recursionFun(int num1, int num2) {
//每排的第一个数或者最后一个数,默认赋值1
if (num2 == 1 || num2 == num1) {
return 1;
} else {
//中间的数是上排的两个数字之和
return recursionFun(num1 - 1, num2 - 1) + recursionFun(num1 - 1, num2);
}
}
/**
* 直接打印法
*
* @param row 行数
*/
private static void directFun(int row) {
//声明一个二维数组
int[][] arr = new int[row][];
//遍历
for (int i = 0; i < row; i++) {
// 打印空格,空格数量是数字占位的一半,这里用3位,最多可20行
for (int b = 0; b < row - 1 - i; b++) {
System.out.print(" ");
}
// 二维数组的元素赋值一维数组,每横排的元素数量=第几排排数
arr[i] = new int[i + 1];
//遍历打印这一维数组横排
for (int j = 0; j < arr[i].length; j++) {
//首尾元素值都是1
if (j == 0 || j == arr[i].length - 1) {
arr[i][j] = 1;
} else {
//当前元素的值是上一排腰上的俩值之和.对应索引是 i-1,j-1与i-1,j
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
//格式化输出数值
System.out.printf("%6d", arr[i][j]);
}
//换行
System.out.println();
}
}
}