自调用递归
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
列表中
好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
列表中