杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现
将杨辉三角每次计算时,都抽象成每行后面先增加一个0
于是本行第i个元素就等于上一行的(i-1)个元素和i元素的和(每行第0个元素是上一行抽象后的第0个元素和第(0-1)个元素,即抽象出来的0与1的和)
抽象出来的0为下一行提供足够的遍历次数
[1, 0] [1, 1, 0] [1, 2, 1, 0] [1, 3, 3, 1, 0] [1, 4, 6, 4, 1, 0]代码:
def triangles(): row = [1] while True: yield row row.append(0) # 补零以便于计算下一行数据 row = [row[i - 1] + row[i] for i in range(len(row))] # 通过本行相邻两个数据相加获得下一行的数据 if __name__ == '__main__': t = triangles() for i in range(6): print(next(t))结果:
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1]代码:
def triangles(): row = [1] while True: yield row for i in range(1, len(row)): row[i] = pre_line[i] + pre_line[i - 1] # 本行第 i 个元素为上一行的 i 元素与 i-1 元素相加 row.append(1) # 本行最后需要补元素 1 pre_line = row[:] # 复制本行, 用于计算下一行数据 if __name__ == '__main__': t = triangles() for i in range(6): print(next(t))结果:
[1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1]代码:
def triangles (line): result = [[1]] for row in range(1, line): # for 循环计算杨辉三角一共多少行 current_row = [] for column in range(row+1): # for 循环计算当前行一共多少个元素 if column == 0: upper_former_param = 0 # 计算此行的第一个元素, 则它上一行的前一个元素为 0 else: upper_former_param = result[row-1][column-1] # 获得此行元素在上一行的前一个元素 if column == len(result[row-1]): upper_param = 0 # 计算此行的第一个元素, 则它上一行同样位置的元素为 0 else: upper_param = result[row-1][column] # 获得此行元素在上一行同样位置的元素 param = upper_former_param + upper_param # 此行的元素为上一行同样位置及其前一个位置的和 current_row.append(param) # 将该元素添加到这一行 result.append(current_row) # 将这一行添加到结果中 return result if __name__ == '__main__': print(triangles(6))结果:
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]