python - 累积递归

标签 python recursion

给定一个字符串列表,我需要通过组合所有字符串的第一个字符来生成一个新字符串。我的解决方案:

def K(lst):
    if lst == []:
        return ""
    else:
        return lst[0][0] + K(lst[1:])

它有效,但我确信这不是累积递归。 我也尝试过使用累积递归来尝试这道题,但找不到正确的解决方案。

def K(lst):
    acc = ""
    if lst == []:
        return acc
    else:
        acc = acc + lst[0][0]
        return K(lst[1:])

我不知道如何改变 acc

最佳答案

您不能在递归函数内声明累加器,因为每次调用都会重新定义它。您需要将其作为函数的参数,常见的习惯用法是创建一个在其定义中包含累加器的辅助函数:

def K(lst):
    return _K(lst, [])

def _K(lst, acc):
    if lst == []:
       return acc
    else:
       head, tail = lst[0], lst[1:]
       return _K(tail, acc + head[0])

关于python - 累积递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27328633/

相关文章:

php - 创建随机字符串,检查它是否存在,如果确实创建一个新字符串

python - 在 matplotlib 中自动调整图形大小

python - 使用 python 字典保存程序统计信息的干净方法

python - 如何使用 Django ORM 获得额外的计数字段?

python - 使用python计算肽单同位素

Java - 扫描文件夹并按文件类型返回文件大小

parsing - 左递归语法中先发现后跟随的混淆

optimization - 什么是尾递归优化?

linux - 按名称递归提取 .7z - P7zip

python - 如何像 slug 一样在 admin django 中创建 pre_populated_field