我正在尝试创建一个递归函数,它接受三个参数:字典名称,原始名称(这将是dict中的键)和final的名称(试图确定是否可以从最初的决赛到达决赛)
我的代码运行良好并输入正确的if语句和所有内容(使用print语句测试)但是,它不是返回True或False的函数,而是每次都返回None。
我确定这是因为而不是用"回复"来调用我的递归函数。我只调用函数的名称。但是,如果我在代码中包含return,则该函数仅使用字典键中的第一个值运行。
对此的任何和所有帮助都将不胜感激。
def evolve(dictname, babyname, evolvedname):
if babyname == evolvedname:
return True
elif babyname in dictname.keys():
if dictname[babyname]:
for i in dictname[babyname]:
evolve(dictname,i,evolvedname)
else:
return False
else:
return False
答案 0 :(得分:0)
收集所有递归调用的结果,如果其中任何一个为真,则返回True
。
类似的东西:
def evolve(dictname, babyname, evolvedname):
if babyname == evolvedname:
return True
elif babyname in dictname.keys():
if dictname[babyname]:
results = [] #To collect results
for i in dictname[babyname]:
results.append(evolve(dictname,i,evolvedname))
#Check if any of them is True
for res in results:
if res==True: return True
return False #No true among childs
else:
return False
else:
return False
但我认为这段代码可以简化为:
def evolve(dictname, babyname, evolvedname):
if babyname == evolvedname:
return True
return any(evolve(dictname,i,evolvedname) for i in dictname.get(babyname,[]))
最后,虽然我不知道你要做什么,但你可能会得到一个无限循环,这就像做dfs但没有标记任何已经探索过的节点(黑色)或正在探索(灰色)。