关于杨辉三角,不多说,直接看图理解
题目:输入一个数字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中