ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

杨辉三角

2019-08-07 13:38:10  阅读:298  来源: 互联网

标签:triangles LL ret range len 杨辉三角 append


原文链接:https://blog.csdn.net/qq_38255084/article/details/78614850

今天学习了廖雪峰老师的python教程,学到杨辉三角函数的时候很迷茫,

他的基本格式如下:

     [1],
    [1, 1],
    [1, 2, 1],
    [1, 3, 3, 1],
    [1, 4, 6, 4, 1],
    [1, 5, 10, 10, 5, 1],
    [1, 6, 15, 20, 15, 6, 1],
    [1, 7, 21, 35, 35, 21, 7, 1],
    [1, 8, 28, 56, 70, 56, 28, 8, 1],
    [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

因为觉得无从下手,思考了一下感觉就是需要上层和下层数据相加,但是错位相加,我也没接触过类似的方法,所以就先放弃了这种方法,

后来我又考虑到一个方法,就是将每一层当做一个数组,进行累积循环,这就需要借助yeild的记忆功能,所以,我就考虑了一方法是类似1+l[n-1]+l+1的方法,考虑了半天毫无头绪,所以就看了下答案....我的天我真心觉得自己只是不扎实不牢固...先上一个我最喜欢的方法:

def triangles(n):            #定义一个函数,并定义一个参数n,现在讲n看做是需要的杨辉三角的层数
    L = [1]                #定义一个列表L,并将其定义为是一个[1]的列表
    while len(L) < n:            #采用循环的方式,如果len(L)也就是层数,小于给定的层数,那么就可以继续循环
        yield L                #重点来了!记住此位置,下次循环直接从此开始!yeild是如此神奇
        L.append(0)            #现在生成一个新的列表, 就是在列表L后面加1
        L = [L[i - 1] + L[i] for i in range(len(L))]        
高潮来啦,还是分开讲,range(len(N))=[0,1],
so, N = [N[i-1]+N[i] for i in [0,1]] 
so, N = [N[0-1]+N[0] , N[1-1]+N[1]]
so, N = [0+1 , 1+0] = [1,1] 
这样,杨辉三角的第二行就出来啦!

然后我分析了一下他的运行机制,嗯原来我第一种想法是如此靠近答案....但是真的差距好大....后面的备注是我自己的简单想法,如有不足,请指正...我是菜鸟一枚,欢迎大神指导
后面附几种其他的表达式类型,仅供参考:

def triangles():
    result = [1]
    while True:
        yield result
        l = list(result)
        l.append(0)
        result=[l[i]+l[i-1] for i in range(len(l))]
    return 'done'


def triangles():  # 列表生成式
#     L = [1]
#     while True:
#         yield L
#         L.append(0)
#         L = [L[i - 1] + L[i] for i in range(len(L))]


三/
def triangles():  # for 循环
#     ret = [1]
#     while True:
#         yield ret
#         for i in range(1, len(ret)):
#             ret[i] = pre[i] + pre[i - 1]
#         ret.append(1)
#         pre = ret[:]


def triangles(num=10):  # 不用生成器
    LL = [[1]]
    for i in range(1, num):
        LL.append(
            [(0 if j == 0 else LL[i - 1][j - 1]) + (0 if j == len(LL[i - 1]) else LL[i - 1][j]) for j in range(i + 1)])
    return LL
 
 
if __name__ == '__main__':
    n = 0
    results = []
    for t in triangles():
        print(t)
        results.append(t)
        n = n + 1
        if n == 10:
            break

以上几种方式都可以运行,大家可以自己选择方法理解吸收,话说,大神真的非常多!
--------------------- 
作者:悦动的音符 
来源:CSDN 
原文:https://blog.csdn.net/qq_38255084/article/details/78614850 
版权声明:本文为博主原创文章,转载请附上博文链接!

标签:triangles,LL,ret,range,len,杨辉三角,append
来源: https://blog.csdn.net/angus_he/article/details/86484998

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有