如何更改这些功能,以便他们递归地找到解决方案

时间:2011-09-24 02:22:13

标签: python functional-programming

这是关于Project Euler问题#67的问题。 (找到三角形的最大路径)我知道在这些问题上寻求帮助可能是一种不好的尝试。

我有这些功能:

def chooseBest(rowOfTriangle):
    if len(rowOfTriangle) == 1:
        return rowOfTriangle
    return list(max(element) for element in zip(rowOfTriangle[0:-1],rowOfTriangle[1:]))

def consolidatePath(rowOfTriangle , bestPath):
    return list(sum(element) for element in zip(rowOfTriangle,bestPath))

适用于格式如下的数据集:

triangle = [[1], [2, 3], [4, 5, 6], [7, 8, 9, 10]]

这个三角形的解决方案如下:

consolidatePath(triangle[0],chooseBest(consolidatePath(triangle[1],chooseBest(consolidatePath(triangle[2],chooseBest(triangle[3]))))))

输出(正确):

[20]

写出每个嵌套函数调用远非最佳,并且当我扩展到问题的百行时将不可能。如何更改consolidatePathchooseBest以在适当的时候互相呼叫?

编辑: 想出来了。

1 个答案:

答案 0 :(得分:1)

这样的东西?

def max_path(triangle, idx=0, total=0):
    if triangle:
        row = triangle[0]
        next = max(row[idx:idx+2])
        return max_path(triangle[1:], row.index(next), total+next)
    return total