的有問題的方法是簡單,只需使用默認參數。
def rec_reverse(input=[], output=[]):
if len(input) == 0:
return
else:
output.append(input.pop())
rec_reverse(input, output)
return output
x = list(range(10))
y = list(range(20))
print(rec_reverse(x, []))
print(rec_reverse(y, []))
只是記得通過一項新的列表輸出,這樣就可以不用變老值再次調用它。
然而,您可以用安全的方法,而無需使用默認參數:
def rec_reverse(input):
if not input:
return input
else:
return [input.pop(), ] + rec_reverse(input)
而且你還可以使用它的遞歸等價的lambda表達式:
rec_reverse = lambda input=[]: [] if not input else [input.pop(), ] + rec_reverse(input)
但請記住,那有沒有使用遞歸在所有一個更簡單的解決方案:
x = list(range(10))
rec_reverse = lambda input: input[::-1]
print(rec_reverse(x))
由於在Python中,您可以使用extended slice notation來反轉任何列表。
另外,你可以使用reverse()並且省去你的麻煩。
def reverse(input):
input.reverse()
return input
使用列表作爲arg –
爲什麼不使用'reverse()'方法? – uname01