【问题标题】:Concatenation error in recursive function with a list comprehension具有列表理解的递归函数中的连接错误
【发布时间】:2014-01-30 03:13:27
【问题描述】:

我目前有这个利用列表理解的递归单线

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

如您所见,它从使用范围 (1

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 的位置。 有没有人知道为什么会发生这种情况以及我该如何解决?

【问题讨论】:

    标签: python list recursion tuples concatenation


    【解决方案1】:

    您在列表推导中放置了一个元组,但您没有调整其余代码来处理元组。特别是这部分:

    return 1 if n == 1
    

    不返回元组,这部分:

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

    正在尝试用f 的返回值做数学运算,忘记了返回值是一个元组而不是一个数字。

    【讨论】:

    • 天哪,这当然必须是这么大的疏忽。无论如何,我设法让它工作,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    相关资源
    最近更新 更多