将递归 Python 生成器函数转换为非生成器函数

Convert Recursive Python Generator Function to Non Generator Function

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

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

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

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

100111001010等。

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

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

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

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]