簡體   English   中英

如何從python中的遞歸函數返回值?

[英]How to return value from recursive function in python?

我正在使用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)))

它打印

沒有

結果。

您需要返回遞歸調用的結果。 您在這里忽略它:

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可以等於。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM