python - 递归函数与列表理解中的串联错误

标签 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 <= x < n) 中的函数生成的整数列表中返回最小整数,但是我希望此列表理解返回最小元组,如下所示:

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。 有谁知道为什么会发生这种情况以及如何解决它?

最佳答案

您将一个元组放入列表理解中,但尚未调整其余代码来处理元组。特别是这部分:

return 1 if n == 1

不返回元组,这部分:

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

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

关于python - 递归函数与列表理解中的串联错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21447115/

相关文章:

python - 如何使用列表在数据框中制作文字云?

c++ - 将 std::list 扩展为循环列表

c - C中使用递归的回文数

python - 暂停(序列化)和恢复递归生成器堆栈的解决方法?

recursion - 如何使用递归对 x 和 y 之间的数字求和/相加?

python - 查找与需要从另一个列表中有序包含的正则表达式匹配的字符串子列表

python - 安装 virtualenvwrapper virtualenvwrapper.sh 位置时出错

Python 分组两个列表

Java Stream - 在过滤器中抛出异常并返回列表

python - 使用 Pandas 从具有不同行长度的文件导入数据