python 最后一行递归帕斯卡三角形

python last row recursive pascal triangle

我必须创建一个递归函数 pascal(n),returns 帕斯卡三角形的线 n 作为列表(所以 pascal(3) returns [1, 3, 3, 1]).

到目前为止我有

def pascal(n):

    if n==1: 
        return [[1]]
    else:
        result=pascal(n-1)
        row=[1]
        last_row=result[-1]
        for i in range(len(last_row)-1):
            row.append(last_row[i]+last_row[i+1])
        row+=[1]
        result.append(row)
        return row

但这会导致错误

object of type 'int' has no len()

如果我改写

def pascal(n):

    if n==1: 
        return [[1]]
    else:
        result=pascal(n-1)
        row=[1]
        last_row=result[-1]
        for i in range(len(last_row)-1):
            row.append(last_row[i]+last_row[i+1])
        row+=[1]
        result.append(row)
        return result

然后调用pascal(3)[-1],就没有问题了。我该如何解决这个问题?谢谢。

您希望 pascal(n) 到 return 帕斯卡三角形的第 n 行作为列表,但您 returning [[1]] 而不是 [1] for pascal(1).

此外,“last_row”,即对应于 pascal(n) 的前一行将是 pascal(n-1) 而不是 pascal(n-1)[-1]。在您的代码中,result[-1]pascal(n-1)[-1],它是第 (n-1) 行的最后一个元素 (int),因此是错误。

这将是您在进行上述 2 次更改后的功能。

def pascal(n):
    if n == 0: 
        return [1]
    else:
        last_row = pascal(n-1)
        row = [1]
        for i in range(len(last_row)-1):
            row.append(last_row[i]+last_row[i+1])
        row += [1]
        return row