杨辉三角

问题描述:
杨辉三角形,又称贾宪三角形、帕斯卡三角形、海亚姆三角形、巴斯卡三角形,在中国首现于南宋杨辉的《详解九章算术》得名,书中杨辉说明是引自贾宪的《释锁算术》,故又名贾宪三角形。目前《详解九章算术》和《释锁算术》都收录在大英博物馆所藏的《永乐大典》(个人感觉蛮耻辱的)。

这里写图片描述


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   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值