带有列表推导的递归函数中的连接错误

时间:2014-01-30 03:13:28

标签: python list recursion tuples concatenation

我目前使用列表理解

这个递归的单行程
def f(n):
    return 1 if n == 1 else min([2 * f(n - x) + (2 ** x) - 1 for x in range(1, n)])

正如您所看到的,它从使用范围中的函数(1&lt; = x&lt; n)生成的int列表中返回最小int但是我希望此列表理解返回最小TUPLE,如下所示:< / p>

def f(n):
    return 1 if n == 1 else min([(2 * f(n - x) + (2 ** x) - 1, x) for x in range(1, n)])

所以我可以看到最小值属于哪个x值,但是如果我这样做会产生以下错误:

builtins.TypeError: can only concatenate tuple (not "int") to tuple

尽管我尝试调试和制作类似的函数(非递归但它们有效),但我无法理解也看不到它在尝试连接int的位置。 有没有人对于为什么会发生这种情况以及如何解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:2)

你在列表解析中添加了一个元组,但是你没有调整其余的代码来处理元组。特别是这部分:

return 1 if n == 1

没有返回元组,这部分:

2 * f(n - x) + (2 ** x) - 1

尝试使用f的返回值进行数学运算,忘记返回值是元组而不是数字。