使用循环来调用递归函数

时间:2018-03-14 21:03:36

标签: python-3.x loops dictionary recursion

我正在尝试创建一个递归函数,它接受三个参数:字典名称,原始名称(这将是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

1 个答案:

答案 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但没有标记任何已经探索过的节点(黑色)或正在探索(灰色)。