【问题标题】:Convert Recursive Python Generator Function to Non Generator Function将递归 Python 生成器函数转换为非生成器函数
【发布时间】:2023-03-24 04:53:01
【问题描述】:

我在 Python 中有以下函数,我想将其转换为不使用 yield 的更普通的函数,以便将其翻译成其他语言。

有人可以解释一下我该怎么做吗?

该函数只是打印出n选择m的排列。

即对于n==4、m==2,它将创建以下形式的数组:

1001、1100、1010 等等。

def bitmasks(n, m):
    if n == m:
        yield (1 << n) - 1
    elif m > 0:
        for x in bitmasks(n-1, m-1):
            yield (1 << (n-1)) + x
        for x in bitmasks(n-1, m):
            yield x
    else:
        yield 0

【问题讨论】:

    标签: python recursion generator yield


    【解决方案1】:

    将您的结果添加到列表中。

    def bitmasks(n, m):
        if n == m:
            return [(1 << n) - 1]
        elif m > 0:
            res = []
            for x in bitmasks(n-1, m-1):
                res.append((1 << (n-1)) + x)
            for x in bitmasks(n-1, m):
                res.append(x)
            return res
        else:
            return [0]
    

    【讨论】:

      【解决方案2】:

      该函数不打印任何内容,它只是逐个生成每个结果。您可以在开头创建一个空列表,然后将每个yield 替换为append 到您的列表中。最后,您只需返回完整的结果列表。

      【讨论】:

        猜你喜欢
        • 2017-05-16
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 2021-01-03
        • 2012-04-06
        • 2011-11-08
        • 2012-01-14
        • 2017-02-16
        相关资源
        最近更新 更多