繁体   English   中英

Pascal Triangle中每一行的值-递归

[英]Value for each row in Pascal Triangle - Recursion

在下面的代码中:

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] print (pascal_row(5)) [1, 5, 10, 10, 5, 1] ,这是正确的解决方案。

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

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

您可以使用其他递归函数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]

这是涉及助手功能的另一种解决方案:

def pascal_row(row):
    if row == 0:
        return [1]
    return _pascal_row(row, 0, [1])

def _pascal_row(target_row, current_row, res):
    if target_row == current_row:
        return res
    else:
        res = [1] + [res[i] + res[i+1] for i in xrange(len(res) - 1)] + [1]
        return _pascal_row(target_row, current_row + 1, res)

print pascal_row(5) # [1, 5, 10, 10, 5, 1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM