アキュムレータ付きリストのリストで再帰関数を使用していますが、リストの正しいリストを作成するのではなく、アキュムレータに挿入された最後のアイテムのリスト。はるかに単純な再帰関数とリストで問題を再現しました。この関数は、リストのリストを取り、2つのコピーを作成し、それらをn回反転させます。Pythonの再帰関数はリストを変更しません
def recursauto(x, n, instSet):
#Base Case
if(n==0):
instSet.append(x)
print(x) #Print to see what SHOULD be added
else:
temp = [x]*(2) # Make a list with 2 copies of the original list
for i in range(len(temp)):
temp[i][i] = temp[i][i][::-1] # Make the list backwards
for i in range(2):
recursauto(temp[i], n-1, instSet) #Input each element
MyList = [] #Empyt list for accumulator
print("Correct output:")
recursauto([["A", "l", "e", "x"], ["A", "b", "d", "a", "l", "a", "h"]], 2, MyList)
print("Wrong printed list:")
for i in MyList:
print(i) #Print what is in the accumulator
出力が間違っており、アキュムレータに正しいものがありません。
Correct output:
[['A', 'l', 'e', 'x'], ['A', 'b', 'd', 'a', 'l', 'a', 'h']]
[['A', 'l', 'e', 'x'], ['A', 'b', 'd', 'a', 'l', 'a', 'h']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
Wrong printed list:
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
[['x', 'e', 'l', 'A'], ['h', 'a', 'l', 'a', 'd', 'b', 'A']]
これは簡単な方法がありますが、私が実際に作成している関数には再帰が必要です。私が言ったように、これは私が持っている問題の単純化されたレクリエーションです。
正しい出力は何ですか? – Lando
正しい出力は、アキュムレータに入るリストです。これは、出力の「間違った印刷リスト:」行の前に印刷されているものと同じです。 –
再帰関数の目的は何ですか? –