文档开发者中心
我的

【python成长之路】杨辉三角

目的:求出杨辉三角第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附值的功能

从零开始了解的话,可以参考:


点赞
收藏
回复
分享
举报
浏览949 发布于2019-07-17 02:57未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。