Python递归不返回值

时间:2011-05-14 10:19:36

标签: python recursion return-value

由于某些原因,此代码中的x未在递归中更新。不应该更新,因为我在(y)中调用b(c)?当x在b(c)中更新但未返回

global nested
def extract(nested,depth):
    y = depth[0]
    depth = depth[1:]
    extract = nested[y]
    newlist(extract)
    return depth
def newlist(x):
    nested = x
    return nested
def recursiveRef(nested,depth):
    """Return element from nested list
    list ->int
    """
    if len(depth) == 0:
        return nested
    else:
        return recursiveRef(nested,extract(nested,depth))

5 个答案:

答案 0 :(得分:3)

这是你想要做的吗?

def recursiveRef(nested,depth):
    """Return element from nested list
    list ->int
    """
    if len(depth) == 0:
        return nested
    else:
        return recursiveRef(nested[depth[0]],depth[1:])

print recursiveRef([[1,2,3],[4,[5,6],7]],[1])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1,1])
print recursiveRef([[1,2,3],[4,[5,6],7]],[1,1,1])

输出

[4, [5, 6], 7]
[5, 6]
6

答案 1 :(得分:1)

我不是Python主人,但我认为问题是x是递归函数的本地。您正在更改x中的其他全局b(c)。如果我错了,请纠正我。

答案 2 :(得分:1)

您的代码看起来很可疑。当您认为自己想要一个全局变量时,通常需要一个类。考虑将函数包装在类中,并使用self.x而不是x。

那就是说,“全球”不应该写在程序的顶部。相反,您需要在修改全局变量的每个函数中使用它,而不是只读取它的那些函数。

def newlist(x):
    global nested
    nested = x
    return nested

答案 3 :(得分:0)

x函数中的b变量未绑定到recursion函数中的变量。

我真的不明白你要做什么 - 我可能错了,但我建议你考虑把两个函数ab放到recursion中,创建关闭。 通过这种方式,嵌套函数可以查看和修改外部作用域中定义的所有变量。

答案 4 :(得分:0)

更简单的非递归版本:

def inTree(tree, ref):
    for offs in ref:
        tree = tree[offs]
    return tree