1. 非递归方法:
package com.zth;
/**
* 打印杨辉三角
* @author 时光·漫步
*
*/
public class SanJiao {
public static void main(String[] args) {
// 定义数组的长度
int length = 10;
int arr[][] = new int[length][];
// 遍历二维数组
for (int i = 0; i < arr.length; i++) {
// 确定二维数组元素的大小
arr[i] = new int[i+1];
// 打印空格
for (int j = 0; j < arr.length-i-1; j++) {
System.out.print(" ");
}
// 遍历一维数组
for (int j = 0; j < arr[i].length; j++) {
if(j == 0 || arr[i].length-1 == j) {
// 三角形两腰全为 1
arr[i][j] = 1;
}else {
// 其他元素等于两肩数字之和
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
}
System.out.printf("%4d",arr[i][j]);
}
System.out.println();
}
}
}
执行结果:
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
2. 递归方法:
package com.zth;
public class SanJiao1 {
public static int fun(int i,int j) {
if(j == 1 || i == j) {
return 1;
}else {
return fun(i-1,j)+fun(i-1,j-1);
}
}
public static void main(String[] args) {
int length = 10; // 打印的行数
for (int i = 1; i <= length; i++) {
// 打印空格
for (int j = 1; j <= length-i; j++) {
System.out.print(" ");
}
for (int j = 1; j <= i; j++) {
System.out.printf("%4d",fun(i,j));
}
System.out.println();
}
}
}
执行结果:
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