包含列表弹出的递归函数的奇怪输出

时间:2018-03-13 06:10:18

标签: python recursion

对于以下递归函数,我不知道为什么输出是

[['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

1 个答案:

答案 0 :(得分:2)

列表通过引用传递。如果List元素本身也是列表,它们也将通过引用传递。

在第一级递归中,删除L的第一个元素(a),并将新的第一个元素([b,[c]])传递给elem名下的第二级递归。当你在最外层的递归中得到你的print语句时,第一个元素已经被缩减为[[c]]时,对elem所做的任何更改也将被赋予L的第一个元素。