数学知识引入:
二项式定理: ( a + b ) n = C n 0 a n b 0 + C n 1 a n − 1 b 1 + ⋅ ⋅ ⋅ + C n n b n (a+b)^{n}=C_n^0a^{n}b^{0}+C_n^1a^{n-1}b^{1}+···+C_n^nb^{n} (a+b)n=Cn0anb0+Cn1an−1b1+⋅⋅⋅+Cnnbn
(不妨令a = b =1),可得到杨辉三角与二项式定理的关系:
1
C
0
0
C_0^0
C00
1 1
C
1
0
+
C
1
1
C_1^0+C_1^1
C10+C11 =
(
1
+
1
)
1
(1+1)^{1}
(1+1)1
1 2 1
C
2
0
+
C
2
1
+
C
2
2
C_2^0+C_2^1+C_2^2
C20+C21+C22=
(
1
+
1
)
2
(1+1)^{2}
(1+1)2
1331
C
3
0
+
C
3
1
+
C
3
2
+
C
3
3
C_3^0+C_3^1+C_3^2+C_3^3
C30+C31+C32+C33=
(
1
+
1
)
3
(1+1)^{3}
(1+1)3
⋅
⋅
⋅
⋅
⋅
⋅
······
⋅⋅⋅⋅⋅⋅
第n行------------>
(
1
+
1
)
n
−
1
(1+1)^{n-1}
(1+1)n−1
易知:杨辉三角的每一项分别对应二项展开式的的二项式系数,故只需计算出相应位置的二项式系数即可
题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
class YangHui {
public int fun(int n) {//定义计算阶乘的方法(由组合数计算公式可得)
if (n == 0 || n == 1) {
return 1;
} else {
return fun(n - 1) * n;
}
}
}
public class Test {
public static void main(String[] args) {
int i, j;
YangHui Y = new YangHui();
for (i = 1; i <= 9; i++) {// i表示行
for (j = 10; i < j; j--) {
System.out.print("\t");//打印每一行开头的空格
}
if (i == 1) {//第一行单独讨论
System.out.println(1);
} else {
for (int k = 0; k <= i - 1; k++) {
int ans1 = Y.fun(i - 1);
int ans2 = Y.fun(k);
int ans3 = Y.fun(i - 1 - k);
System.out.print(ans1 / (ans2 * ans3));
System.out.print("\t\t");
}
}
System.out.println();//每行末尾进行换行
}
}
}