[英]Convert Recursive Python Generator Function to Non Generator Function
我在 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
該函數不打印任何內容,它只是逐個生成每個結果。 您可以在開始時創建一個空列表,然后通過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.