杨辉三角形

杨辉三角形，又称帕斯卡三角形、贾宪三角形、海亚姆三角形、巴斯卡三角形，是二项式系数的一种写法，形似三角形，在中国首现于南宋杨辉的《详解九章算法》得名，书中杨辉说明是引自贾宪的《释锁算书》，故又名贾宪三角形。前 9 行写出来如下：
　　　　　　　　１
　　　　　　　１　１
　　　　　　１　２　１
　　　　　１　３　３　１
　　　　１　４　６　４　１
　　　１　５　10　10　５　１
　　１　６　15　20　15　６　１
　１　７　21　35　35　21　７　１
１　８　28　56　70　56　28　８　１
杨辉三角形第 层（顶层称第0 层，第 1 行，第  层即第 行，此处 为包含0 在内的自然数）正好对应于二项式  展开的系数。例如第二层1 2 1 是幂指数为2 的二项式 展开形式 的系数。

中国数学家的研究

中国贾宪是贾宪三角的发明人，贾宪/杨辉称之为“释锁求廉本源”，朱世杰称之为“古法七乘方图”（1303年），明代数学家吴敬《九章详注比类算法大全》称之为“开方作法本源”（1450年）；明王文素《算学宝鉴》称之为“开方本源图”（1524年）；明代程大位《算法统宗》称之为“开方求廉率作法本源图”（1592年）。
清代梅文鼎《少广拾遗》称之为“七乘府算法”（1692年）；清代孔广森《少广正负术》称之为“诸乘方乘率表”；焦循《加减乘除释》称之为“古开方本原图”；刘衡《筹表开诸乘方捷法》称之为“开方求廉率图”；项名达《象数一原》称之为“递加图”。伟烈亚力《数学启蒙》称之为“倍廉法表”；李善兰《垛积比类》称之为“三角垛表”。近代中算史家李俨称之为“巴斯噶三角形”，但根据《永乐大典》指出“巴斯噶三角形”最早由贾宪使用。。著名数学家华罗庚，在1956年写的一本通俗读物《从杨辉三角谈起》，将贾宪的《开方作法本源》称为“杨辉三角”，首次将“巴斯噶三角形”回归宋代数学家名下；此后的中学数学教科书和许多数学科普读物都跟随之。另一方面，专业的中国数学史著作，都用“贾宪三角”这个称呼。。

Go

1 package main 2  3 import "fmt" 4  5 //行数 6 const LINES int = 10 7  8 //杨辉三角 9 func ShowYangHuiTriangle() {10 nums := []int{}11 for i := 0; i < LINES; i++ {12 //补空白13 for j := 0; j < (LINES - i); j++ {14 fmt.Print(" ")15 }16 17 for j := 0; j < (i + 1); j++ {18 var length = len(nums)19 var value int20 21 if j == 0 || j == i {22 value = 123 } else {24 value = nums[length-i] + nums[length-i-1]25 }26 nums = append(nums, value)27 //每个数字后面加空格以间隔数字.28 fmt.Print(value, " ")29 }30 fmt.Println("")31 }32 }33 func main() {34 ShowYangHuiTriangle()35 }

Java

1 public class TriangleArray 2 { 3    public static void main(String[] args) 4    { 5       final int NMAX = 10; 
 6  
 7       // allocate triangular array 8       int[][] odds = new int[NMAX + 1][]; 9       for (int n = 0; n <= NMAX; n++)10          odds[n] = new int[n + 1];  
11  
12       // fill triangular array13       for (int n = 0; n < odds.length; n++)14          for (int k = 0; k < odds[n].length; k++)15          {16             /*17              * compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)18              */19             int lotteryOdds = 1;20             for (int i = 1; i <= k; i++)21                lotteryOdds = lotteryOdds * (n - i + 1) / i;22  
23             odds[n][k] = lotteryOdds;24          }25  
26       // print triangular array27       for (int[] row : odds)28       {29          for (int odd : row)30             System.out.printf("%4d", odd);31          System.out.println();32       }33    }34 }

Python

代码量较少的实现方式如下：
1 # -*- coding: utf-8 -*-2 #!/usr/bin/env python3 def triangles():4     L = [1]5     while True:6         yield L7         L = [sum(i) for i in zip([0]+L, L+[0])]
下面是另一种较易理解的方式：
1 def triangles():2     L = [1]3     S = []4     while True:5         yield L 
6         L = [1] + S + [1]7         S = []8         for i in range(len(L)-1):9             S.append(L[i] + L[i+1])

Visual Basic

Private Sub Form_Click()
    N = InputBox("", "", 5)
    ReDim a(N + 1, N + 1), b(N + 1, N + 1)
    Cls
    k = 8
    For I = 1 To N
    Print String((N - I) * k / 2 + 1, " ");
    For J = 1 To I
    a(I, 1) = 1
    a(I, I) = 1
    a(I + 1, J + 1) = a(I, J) + a(I, J + 1)
    b(I, J) = Trim(Str(a(I, J)))
    Print b(I, J); String(k - Len(b(I, J)), " ");
    Next J
    Print
    Next I
End Sub