對於一些算法,我發現它方便地定義遞歸函數,看起來是這樣的:循環遞歸函數
def f(l):
for i in range(2):
if len(l)>=1:
print(l+[i])
else:
return f(l+[i])
f([0])
但行爲是我所期望的不同。它所做的是打印
[0, 0]
[0, 1]
但我希望它打印
[0,0]
[0,1]
[1,0]
[1,1]
不知何故,嵌套函數可以訪問變量和我,而不是開始一個新的循環與一些不同的變量,它只需繼續用這個變量i進行計數。我不明白爲什麼Python會這樣做。
我的(含糊不清)問題是爲什麼Python這樣做,是否有一些明顯的修改我的代碼,會給我最初的預期輸出?
你永遠不會改變'l',它從'len(l)== 1'開始,這意味着它打印兩次並存在:你的'else'永遠不會被觸發。 – TemporalWolf
輸入「[0]」如何導致你描述的輸出?請[編輯]你的問題,包括[mcve]。 – TemporalWolf
@Keiwan任何有效的輸入(一個列表)可能會提供給該函數,它會輸出上述或提供的列表兩次,然後是一個0,然後是一個1。我懷疑這不是他的意圖。 – TemporalWolf