python中对象和方法的递归

时间:2019-06-29 19:26:10

标签: python recursion

我想创建一个由父母和孩子组成的类,以及一个递归方法来调用最后一个 child

class MyClass:
    def __init__(self,val,child =None):
        self.val = val
        self.child = child
    def findLastChildVal(self):
        if self.child ==None:
            return self.val
        return (...)

c = MyClass("I'm child")
p = MyClass("I'm parent",c)
p.findLastChildVal()

我不知道该写些什么,而不是(...)。令人困惑。

1 个答案:

答案 0 :(得分:0)

这是一个经典的递归问题,我认为使用静态函数代替成员函数会容易得多:

class MyClass:
    def __init__(self, val, child =None):
        self.val = val
        self.child = child

    @staticmethod
    def find_last_child_val(current_node: MyClass):
        if current_node.child == None:
            return current_node.val
        else:
            return MyClass.find_last_child_val(current_node.child)

c = MyClass("I'm child")
p = MyClass("I'm parent", c)
MyClass.find_last_child_val(p)

更新

请注意,使用像这样的递归来搜索孩子并不有效。 find_last_child_val()的复杂度为O(n)。在for循环中执行n次迭代而不是递归,效率更高。如果您想不出一种降低树遍历复杂性的方法,建议您使用其他数据结构。