杨辉三角的实现
杨辉三角定义如下:
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)

浙公网安备 33010602011771号