簡體   English   中英

將遞歸 Python 生成器函數轉換為非生成器函數

[英]Convert Recursive Python Generator Function to Non Generator Function

我在 Python 中有以下函數,我想將它轉換成一個更普通的函數,它不使用yield以便我可以將它翻譯成其他語言。

有人可以解釋一下我該怎么做嗎?

該函數只是打印出n選擇m的排列。

即對於n==4 , m==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

該函數不打印任何內容,它只是逐個生成每個結果。 您可以在開始時創建一個空列表,然后通過append到您的列表來替換每個yield 最后,您只需返回完整的結果列表。

將您的結果添加到列表中。

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM