问题描述:
杨辉三角形,又称贾宪三角形、帕斯卡三角形、海亚姆三角形、巴斯卡三角形,在中国首现于南宋杨辉的《详解九章算术》得名,书中杨辉说明是引自贾宪的《释锁算术》,故又名贾宪三角形。目前《详解九章算术》和《释锁算术》都收录在大英博物馆所藏的《永乐大典》(个人感觉蛮耻辱的)。
1.迭代实现
看程序:
public class BascaTriangleTest {
public static int fun(int x, int y){
// 确定每行的第一个和最后一个是1,坐标从1开始,便于计算
if(y == 1 || x == y){
return 1;
// 确定中间值,每一个值都是前一行(x-1)的前一列(y-1)和对应列(y)的和
}else{
return fun(x - 1, y - 1) + fun(x - 1, y);
}
}
public static void bascaTriangle(int n){
for (int x = 0; x < n; x++) {
// 输出数字前面的空白部分
for (int y = 0; y < n - x; y++) {
System.out.print(" ");
}
// 让行和列的坐标从1开始,第一行输出空白
for (int y = 1; y <= x; y++) {
System.out.print(fun(x, y) + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
bascaTriangle(10);
}
}
结果:
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
2.公式法
看程序:
public class BascaTriangleTest {
public static long fun(int x, int y){
// 确保每行第一列是1
long p = 1L;
// 利用公式计算除了第一列其他的返回值
for(int i = 1; i <= y; i++){
p = p * (x - i + 1) / i;
}
return p;
}
public static void bascaTriangle(int n){
for (int x = 0; x < n; x++) {
// 输出数字前面的空白部分
for (int y = 0; y < n - x; y++) {
System.out.print(" ");
}
// 输出数字部分
for (int y = 0; y <= x; y++) {
System.out.print(fun(x, y) + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
bascaTriangle(10);
}
}
结果:
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