本帖最后由 daoqin 于 2014-9-9 22:31 编辑
我给出递归的解法。
1.第一种递归
f(x,y)=1 (x==1或者x==y)
f(x,y)=f(x-1, y-1)+f(x, y-1) (其他)
x表示列数,y表示层数。
- /**
- * 递归打印杨辉三角
- * @author Administrator
- *
- */
- public class YanHui {
-
- int f(int x,int y){
- if(x == 1 || x == y){//递归的出口
- return 1;
- }else {
- return f(x-1, y-1)+f(x, y-1);//杨辉三角的规律
- }
- }
- void printYanhui(int n){
- int i,j;
- for(i = 1;i<=n;i++){
- for (j = 1; j <=i; j++) {
- System.out.printf("%5d",f(j, i));//打印第i行第j个元素
- }
- System.out.print("\n");
- }
- }
- public static void main(String[] args) {
- int x = 6;
- new YanHui().printYanhui(x);//设定阶数
- }
- }
复制代码 2.利用阶乘实现
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
规律如下:
第4行第一个数为3:3!/(2!*(3-2)!) =3
第4行第0个数为3: 3!/(0!*(3-0)!)=1
杨辉三角满足一个组合公式:n!/(!m*!(n-m)) 利用此公式就可求出每一个数
公式如下:
某个位置杨辉三角数= 当前行数的阶乘(从0开始)/( 列的位置数组成的阶乘从0开始) *(行数-列组成数的阶乘) )
- /**
- * 递归打印杨辉三角
- * @author Administrator
- *
- */
- public class YanHui {
-
- int f(int n){
- if(n==0){
- return 1;
- }
- return n*f(n-1);
- }
- void printYanhui(int n){
- int i,j;//i表示行数,j表示层数,均从0开始
- for(i = 0;i<=n;i++){
- for (j = 0; j<=i; j++) {
- System.out.printf("%5d",f(i)/(f(i-j)*f(j)));//打印第i行第j个元素
- }
- System.out.print("\n");
- }
- }
- public static void main(String[] args) {
- int x = 5;
- new YanHui().printYanhui(x);//设定阶数
- }
- }
复制代码
|