杨辉三角

关于杨辉三角,不多说,直接看图理解

题目:输入一个数字n(正整数),输出杨辉三角的前n行。即输入1,返回上图第一行:1;输入2,返回上图前三行1,1 1;输入3,返回上图前三行1,1 1,1 2 1;以此类推。

题目解析:根据图片我们可知,想要得到结果,我们需要得到每一行结果,然后将每一行结果拼接。而杨辉三角每一行 都由上一行推导而出,每个元素都由前一行与它相邻的两个元素相加,结尾拼接1得到。很显然我们可以使用递归函数完成。

# 根据前一列数据得到后一列数据
def func2(arry):
    arr = [1]
    for i in range(len(arry) - 1):
        arr.append(arry[i]+arry[i+1])
    arr.append(1)
    return arr
# 递归函数,根据传入值,输出对应数组序列
def func1(n):
    res_arr = [[1], ]
    if n <= 1:
        return res_arr
    else:
        return func1(n-1) + [func2(func1(n-1)[-1])]

解析函数:

  func1 为一个递归函数,当n=1是直接返回二维列表[[1], ]

    当n>1时,我们用前n-1行数据“func1(n-1)”,拼接第n行数据“func2(func1(n-1)[-1])”

    func2函数返回的是一维列表,在函数外添加“[ ]”,以保持数据类型不变 

    func1(n-1):前n-1行数据,

    func1(n-1)[-1]:第n-1行数据

  func2函数参数为列表,目的是根据前一行数据得到下一行数据。

    arry:前一行数据

    arr:为目标数据(下一行),

    for循环遍历arry,使arry每个数据和下一个数据和相加,将结果拼接到arr中

  

  

posted on 2020-08-11 11:35  懒得显示  阅读(168)  评论(0编辑  收藏  举报