如何在python中从递归函数内部增长和返回列表

如何在python中从递归函数内部增长和返回列表,python,list,recursion,pascals-triangle,Python,List,Recursion,Pascals Triangle,我有一个Pascal三角形的递归解决方案,但它返回所请求的三角形的行,而不是它前面的所有行。我想知道是否有一种方法可以在从基本情况和调用堆栈向下计算所有行时将它们收集起来,并将其作为列表返回 编写用于计算/返回任何给定行的递归并不困难,但我认为可以将每个返回附加到一个列表变量。我遇到的问题是,如果我要返回整个列表,它会弄乱return语句并中断行的计算 def pascal(n, tri): if n == 0: return tri else:

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

编写用于计算/返回任何给定行的递归并不困难,但我认为可以将每个返回附加到一个列表变量。我遇到的问题是,如果我要返回整个列表,它会弄乱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语句显示行被追加到列表中。我就是想不出如何在函数之外返回列表。我需要'tri'的最后一个列表元素来生成下一层,但同时我想返回所有'tri'作为我的最终返回


这是我的第一个问题,如果我没有看到一些显而易见的东西,我深表歉意。谢谢大家!

构建
行时,应返回整个
tri
,并仅使用
r
的最后一个元素:

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

你好我认为这个问题被@blhsing错误地解决了。这个问题显然不是关于Pascal三角形,而是关于递归和动态规划!答案是使用两个函数,一个外部函数累加三角形的行,一个内部三角形计算下一行。我使用您的代码编写了一个草图(不幸的是,这个草图不起作用),请看这里:最简单的方法是创建一个补充函数来累积迭代中的列表。但肯定有更好的方法,我想做一些类似的事情,或者是备忘录,但我真的想保持原始代码的简洁性。Yevhen提供了下面正确的解决方案。谢谢你的评论!谢谢,Yevhen,这正是我想要的!