python - For 循环停止在递归函数中迭代

标签 python for-loop recursion directed-acyclic-graphs

我正在尝试解决 dependency hell使用 Python 2.7 的 Hackerrank 问题。

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

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

但我不喜欢混合返回和更新列表,所以我会这样做:

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

关于python - For 循环停止在递归函数中迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43034302/

相关文章:

python - 我无法在 Windows 10 的 cmd 中或在 kali linux 的终端中运行 .py 文件

java - 如何用一个循环遍历二维数组?

python - 在 python 中循环一个未命名的字典

algorithm - 有关递归算法复杂性的信息

c# - 如何删除所有空的 XElements

python - 图像在 Pygame 中不会移动

python - 加密柱状转置密码

python - 转换为共享字符串数组的 Numpy 字符串矩阵会导致类型不匹配

javascript - 三个JS : Sphere & Line Animation

mysql - 如何在 MySQL 中创建递归存储过程?