Pascal Triangle中每行的值 - 递归

时间:2016-02-23 18:08:03

标签: python recursion pascals-triangle

在以下代码中:

def pascal_row(row):
    if row == 0:
        return [1]
    previous_row = pascal_row(row - 1)
    pairs = zip(previous_row[:-1], previous_row[1:])
    return [1] + map(sum, pairs) + [1]

如果我print (pascal_row(5)),则返回[1, 5, 10, 10, 5, 1]这是正确的解决方案。

这是一项家庭作业,我们需要使用递归,不能使用任何循环或zip

请有人帮我转换一下吗?谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用不同的递归函数sliding_sum来计算前一行的成对和。然后,只需在任一端附加[1]

def sliding_sum(someList):
    if len(someList) == 1:
        return []
    return [someList[0] + someList[1]] + sliding_sum(someList[1:])

def pascal_row(row):
    if row == 0:
        return [1]
    previous_row = pascal_row(row-1)
    new_row = [1] + sliding_sum(previous_row) + [1]
    return new_row

for i in range(6):
    print pascal_row(i)

输出

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

答案 1 :(得分:0)

这是另一个涉及辅助函数的解决方案:

nil