对于以下递归函数,我不知道为什么输出是
[['c']]
[[['c']]]
如果输入是一个列表:
['a',['b',['c']]]
我认为输出应该是
[['c']]
[['b', ['c']]]
def rec(L):
if len(L)==1:
return
L.pop(0)
for elem in L:
rec(elem)
print L
return
答案 0 :(得分:2)
列表通过引用传递。如果List元素本身也是列表,它们也将通过引用传递。
在第一级递归中,删除L的第一个元素(a),并将新的第一个元素([b,[c]])传递给elem名下的第二级递归。当你在最外层的递归中得到你的print语句时,第一个元素已经被缩减为[[c]]时,对elem所做的任何更改也将被赋予L的第一个元素。