自调用递归

Recursion with self-calling

好morning/day/night,SO 社区。这是我几天前遇到的一个问题,但仍然没有得到解决。

我有字典:

maindict = {
1Class: [2Class, 3Class],
2Class: [2-1Class, 2-2Class, 2-3Class],
3Class: [3-1Class],
2-1Class: [],
2-2Class: [2-2-1Class]
}

等等。

我也知道哪个class是主要的,例如它是1Class。我将其保存在: mainclass = (0, 1Class)

我有一个函数,它在 maindict 中找到给定 class 的子 classes 和 returns 元组字典:

def getSubClass(maindict, class):
    MAGIC HERE
    return result

结果为 getSubClass(maindict, mainclass) 将列出元组:

[(1-1, 2Class), (1-2, 3Class)]

问题是我需要遍历所有 classes 并为每个 class 获取子 classes。有些 classes 没有子 classes,有些有。所以为了测试我这样做了:

b = getSubClass(maindict, mainclass)
c = getSubClass(maindict, b)
d = getSubClass(maindict, c)
e = getSubClass(maindict, d)
f = getSubClass(maindict, e)
g = getSubClass(maindict, f)
h = getSubClass(maindict, g)
i = getSubClass(maindict, h)

和'i'是空的,这意味着我收集了所有classes。我还将每个 c、d 等附加到 dict 并验证输出是正确的。

现在我需要做的就是写我写过的手动脚本的递归函数,但我只是卡在这里。

看起来很简单。如果你最终想要的是一个列表 [b,c,d,e,f,g,h],那么你必须按如下方式编辑你的 getSubClass 函数:

def getSubClass(maindict, class, all_subclasses):
    if not class:
        #class is an empty tuple here
        return None
    MAGIC HERE

    # This will append the tuples in result to all_subclasses
    all_subclasses += result

    # Recursively calls getSubClass using the result computed
    # in the current function call.
    # If result is an empty tuple, then nothing will be added
    # to the all_subclasses list in the recursive call made
    getSubClass(maindict, result, all_subclasses)
    return result

调用函数时:

all_subclasses = []
getSubClass(maindict, mainclass, [])

所有子类元组将出现在 all_subclasses 列表中