的有问题的方法是简单,只需使用默认参数。
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