目的:求出杨辉三角第M行第N个数字。杨辉三角如下所示
(a+b)的n次幂的展开式中各项的系数很有规律,
对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5代码:
def triangle(self, x, y):
if x < 0 or x > 1000 or x < y or y < 0:
return 0
list1 = [1]
for i in range(1, x + 1):
list1 = [1] + [list1[n] + list1[n - 1] for n in range(1, len(list1))] + [1]
return list1[y]【知识点】
1、杨辉三角可以通过递归(self.triangle(x - 1,y - 1) + self.triangle(x - 1,y))来求解,但是超过40行后会出现超时。
#打印杨辉三角
def triangles():
L = [1] #定义L为一个只包含一个元素的列表
while True:
yield L #定义为生成器函数
L =[1] + [L[n] + L[n-1] for n in range(1,len(L))] + [1]
n = 0
for t in triangles():
print(t)
n = n + 1
if n == 10:
break如何打印杨辉三角,可以参考:
【补充知识点】
yield关键字,按我当前的理解,yield函数有以下几个功能 :
1、同return一样,进行结果返回;当需要返回多个结果时,用return必须是以列表形式,而用yield可以一次次的返回
2、带yield的关键字,变成generator(生成器),可以有效降低通过for循环遍历实现的内存增长,相当于用yield关键字的函数都会显得牛逼点!
3、在generator中使用yield时,当程序运行到yield时,就会退出,类似于遇到return退出一样;当程序下次再进入函数时,就从yield继续往下执行
4、m = yield 4并不能实现给m附值的功能
从零开始了解的话,可以参考:





































苏公安网备 32011402010933号