如何从 python 中的递归函数内部增长和 return 列表

How to grow and return a list from inside a recursive function in python

我有一个 Pascal 三角形的递归解决方案,但它 return 是请求的三角形行,而不是它前面的所有行。我想知道是否有一种方法可以收集所有行,因为它们是从基本情况和调用堆栈中计算出来的,并且 return 作为列表。

为任何给定行编写 computing/returning 的递归并不困难,但我认为我可以将每个 return 附加到列表变量。我遇到的问题是我对 return 所做的任何事情都会使 return 语句混乱并破坏行的计算。

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

print(pascal(5, [[1]]))

函数内的 print 语句显示行已附加到列表中。我只是想不出如何 return 函数外的列表。我需要 'tri' 的最后一个列表元素来生成下一层,但同时我想 return 所有 'tri' 作为我最终的 return.

这是我的第一个 SO 问题,如果我在这里没有看到非常明显的东西,我深表歉意。谢谢!

您应该 return 整个 tri 并在构建 row 时仅使用 r 的最后一个元素:

row = [1] + [(r[-1][i] + r[-1][i + 1]) for i in range(len(r[-1]) - 1)] + [1]