如何从python中的递归函数返回值?

Utsav Shrestha

我正在使用python中的二叉树。我需要创建一种搜索树并返回可以插入新值的最佳节点的方法。但是我很难从这个递归函数中返回一个值。我是python的新手。

def return_key(self, val, node):
    if(val < node.v):
        if(node.l != None):
            self.return_key(val, node.l)
        else:
            print node.v
            return node
    else:
        if(node.r != None):
            #print node.v
            self.return_key(val, node.r)
        else:
            print node.v
            return node

打印会node.v打印节点值,但是当我打印返回的节点时:

print ((tree.return_key(6, tree.getRoot().v)))

它打印

没有

结果。

马丁·彼得斯(Martijn Pieters)

您需要返回递归调用的结果您在这里忽略它:

if(node.l != None):
    self.return_key(val, node.l)

if(node.r != None):
    self.return_key(val, node.r)

递归调用与其他函数调用没有什么不同,如果有返回值,您仍然需要处理返回值。使用一条return语句:

if(node.l != None):
    return self.return_key(val, node.l)

# ...

if(node.r != None):
    return self.return_key(val, node.r)

请注意,由于None是单例值,因此您可以并且应该is not None在此处使用该值来测试是否不存在:

if node.l is not None:
    return self.return_key(val, node.l)

# ...

if node.r is not None:
    return self.return_key(val, node.r)

我怀疑您将错误的论点传递给了电话,但从此开始;如果第二个参数是节点,则不要传入节点值:

print(tree.return_key(6, tree.getRoot())) # drop the .v

另外,如果所有node类都具有相同的方法,则可以递归到该方法,而不是使用self.return_value();。Tree公正的做:

print tree.return_key(6)

其中Tree.return_key()代表根节点:

def return_key(self, val):
    root = tree.getRoot()
    if root is not None:
        return tree.getRoot().return_key(val)

Node.return_key()变成:

def return_key(self, val):
    if val < self.v:
        if self.l is not None:
            return self.l.return_key(val)
    elif val > self.v:
        if self.r is not None:
            return self.r.return_key(val)

    # val == self.v or child node is None
    return self

val也在这里更新了测试逻辑;如果val < self.v(或val < node.v在您的代码中)为假,则不要认为这val > self.v是真的;val可以相等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python 中递归函数的返回值

来自分类Dev

如何获取递归python函数以返回值?

来自分类Dev

如何在递归for循环函数中返回值?

来自分类Dev

如何终止递归函数并返回值

来自分类Dev

python中的递归和返回值

来自分类Dev

递归:如何从递归函数返回值 1

来自分类Dev

从递归函数返回值

来自分类Dev

如何使用python中的函数返回值填充列表?

来自分类Dev

我如何从python中的函数打印并返回值?

来自分类Dev

PHP:如何从递归函数返回值的计数器?

来自分类Dev

如何理解递归函数调用的返回值?

来自分类Dev

在递归循环函数php中返回值

来自分类Dev

VB脚本中的递归函数返回值

来自分类Dev

在递归函数PHP中返回值的问题

来自分类Dev

解释c ++中'int'类型的递归函数的返回值

来自分类Dev

如何从gwidgets中的函数返回值

来自分类Dev

如何从函数中的exec返回值?

来自分类Dev

如何从gwidgets中的函数返回值

来自分类Dev

如何从Java中的函数返回值?

来自分类Dev

在python中打印函数的返回值?

来自分类Dev

从python中的修饰函数返回值

来自分类Dev

从异步递归函数返回值

来自分类Dev

递归函数的返回值为'undefined'

来自分类Dev

从Linux bash递归函数返回值

来自分类Dev

VBScript递归函数问题返回值

来自分类Dev

从Linux bash递归函数返回值

来自分类Dev

递归函数的意外返回值

来自分类Dev

如何从Scheme中的递归调用正确返回值?

来自分类Dev

如何通过Java中的递归返回值列表?