杨辉三角的实现

杨辉三角定义如下:

          1
        1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5   10  10  5   1

把每一行看做一个list,如何实现:

普通函数实现:

def triangles(row):
    L = [1]
    n = 0
    while n < row:
        print(L)
        L.append(0)         
        L = [L[i-1] + L[i] for i in range(len(L))]   
        n += 1

triangles(10)

算法说明:

首先,对杨辉三角做一下分析:下一行的首末元素与上一行的首末元素相同,不同的是中间的元素依次等于上一行相邻两个元素的和。我们也可以想象下一行首末元素等于上一行首末元素加0。

1. L.append(0)对列表新增一个元素0,主要有两个原因:①将列表元素数量增加至下一行元素数量;②下一行首末元素等于上一行首末元素加0。

2. L = [L[i-1] + L[i] for i in range(len(L))] , 下一行初始元素等于L[-1]+L[0],即:0+L[0],末尾元素等于L[len(L)-2]+L[len(L)-1],即:L[len(L)-2]+0,中间元素依次等于上一行相邻元素的和。这样即可满足首末元素,也满足中间的元素。

生成器实现:

def triangles(row):
    L = [1]
    n = 0
    while n < row:
        yield L
        L.append(0)
        L = [L[i-1] + L[i] for i in range(len(L))]
        n += 1

for i in triangles(10):
    print(i)
posted @ 2018-06-12 16:56  Joe1991  阅读(98)  评论(0)    收藏  举报