我想從整數列表[3,5,7,9]
中產生所有排列,其導致特定總和值15
。我實現了這一點,沒關係。整數的所有排列對應於特定總和
def add_next(seq, count, m):
s = sum(seq)
if s == m:
count += 1
print(seq)
elif s < m:
for i in [3,5,7,9]:
add_next(seq + [i], count, m)
else:
return count
add_next([], 0, 15)
輸出:
[3, 3, 3, 3, 3]
[3, 3, 9]
[3, 5, 7]
[3, 7, 5]
[3, 9, 3]
[5, 3, 7]
[5, 5, 5]
[5, 7, 3]
[7, 3, 5]
[7, 5, 3]
[9, 3, 3]
的問題是如何重新寫這個函數返回可能的排列只是數作爲函數的結果?由於對於巨大的列表和大數值,生成所有字符串輸出是不合理的。我不完全理解如何傳遞遞歸函數內外的值。
我想:
def add_next2(seq, count, m):
s = sum(seq)
if s == m:
count += 1
print(seq)
elif s < m:
for i in [3,5,7,9]:
count = add_next2(seq + [i], count, m)
else:
return count
add_next([], 0, 15)
但retuns錯誤TypeError: unsupported operand type(s) for +=: 'NoneType' and 'int'
。所以count
是None
。爲什麼?
另一個選擇是如何重寫這個函數來將其轉換爲生成器並且一個接一個地生成輸出串?
這也是一個很好的例子,它解決了我的錯誤,並建議改進!謝謝。 – DrDom