繁体   English   中英

Python字典中的递归

[英]recursion in Python dictionary

我正在通过Python在字典中实现一个switch / case表达式。 谁能告诉我为什么下面的递归调用是错误的?

我遇到异常: RuntimeError: maximum recursion depth exceeded

def rec(x):
    return {
        'a': 'one',
        'b': 'two',
        'ac': rec('a'),
    }.get(x,x)

获得无限递归的原因是因为您要告诉Python将递归调用rec('a')结果存储在字典中。 这意味着它无条件地递归,因为您总是在进行查找之前先构建字典。

解决此问题的一种方法是将lambda函数存储在字典中,然后仅调用get 在此版本中,仅当传入适当的x值时才进行递归调用:

def rec(x):
    return {
        'a': lambda: 'one',
        'b': lambda: 'two',
        'ac': lambda: rec('a'),
    }.get(x, lambda: x)()

不幸的是,这有点麻烦。 我不确定是否只有三个案例和一个默认案例。 我只是使用一系列的if语句,即使那可能不像字典查找那样有效。

您的字典值不会被懒惰地放入,这意味着它总是创建字典

{
    'a': 'one',
    'b': 'two',
    'ac': rec('a'),
}

无论您是否查找'ac' 因此,您不能仅在递归调用中查找'a' ,而是必须首先做出dict(递归另一层)。

您必须以另一种方式编写此代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM