I have a recursive solution to Pascal's triangle, but it returns the row of the triangle requested, and not all of the rows preceding it. I would like to know if there is a way to scoop up all the rows as they are computed from the base case and down the call stack, and return that as a list.
Writing the recursion for computing/returning any given row wasn't difficult but I thought I could just append each return to a list variable. The issue I'm having is anything I do to return the whole list messes with the return statement and breaks the computation of the row.
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]]))
The print statement inside the function shows that the rows get appended to the list. I just can't think of how to return the list outside the function. I need the last list element of 'tri' to generate the next layer, but at the same time I want to return all of 'tri' as my final return.
This is my first SO question so apologies if I'm just not seeing something blindingly obvious here. Thank you!