for循环在递归函数中停止迭代

For loop stops iterating in recursive function

我正在尝试使用 Python 2.7.

解决 Hackerrank 上的 dependency hell 问题

我已经形成了一个字典,其中列出了所有的依赖项。字典是这样的:

d = {1: [1, 8], 2: [0], 3: [1, 7], 4: [1, 7], 5: [1, 2], 6: [1, 2], 7: [0], 8: [2, 3, 4]}

每个列表中的第一个数字就是该列表中元素的数量。接下来的数字是依赖项的索引。每个数字是一个软件的索引(即软件#1)。

我试图创建一个递归函数,给定一个索引,将列出所有需要安装的软件,以便安装预期的软件。我现在不担心订单。这是函数:

def listSW(p,d,L):
    L.append(p)
    if d[p][0] > 0:
        for i in xrange(1,d[p][0]+1):
            return listSW(d[p][i],d,L)
    else:
        return L

其中 L 是一个列表(最初为空),我在其中转储所有需要安装的索引,p 是我们打算安装的软件。

问题是在 for 循环中只考虑了 i = 1。因此,如果我 运行 p = 8 的函数,我得到:

[8, 3, 7]

当我打算得到:

[8, 3, 7, 4, 7]

我做错了什么?

def listSW(p,d,L):
    L.append(p)
    if d[p][0] > 0:
        for i in xrange(1,d[p][0]+1):
            listSW(d[p][i],d,L)
    return L

但我不想混合 return 和更新列表,所以我会这样做 :

def buildList(p,d,L=[]):
    def patchList(p,d,L):
        L.append(p)
        for i in d[p][1:]:
            patchList(i,d,L)
    patchList(p,d,L)
    return L