递归遍历其他节点引用的节点

如何参考前一个节点递归迭代节点?在下面的示例中期望输出 4,3,2,1:


class Node:

    def __init__(self, parent, value):

        self.parent = parent

        self.value = value


    def append(self, value):

        return Node(self, value)


def list(l):

    print(l.value)

    while l.parent is not None:

        list(l.parent)


l = Node(None, 1)

l = l.append(2)

l = l.append(3)

l = l.append(4)

list(l)


PIPIONE
浏览 287回答 2
2回答

偶然的你

您的类结构已经成功地将节点的self值传递给其子节点。问题是你的list功能。while l.parent is not None:永远不会结束,因为循环中的任何内容都不会改变 的值l。调用list递归将创建一个新的上下文,其中一个名为另一个变量l具有与第一上下文的不同的值l,但是这对第一没有影响l或第一环。递归函数通常不需要实际循环来迭代数据结构的元素。尝试:def list(l):    print(l.value)    if l.parent is not None:        list(l.parent)或者:def list(l):    while l is not None:        print(l.value)        l = l.parent(我推荐后者,因为如果链超过 999 个元素,第一个会因“超过最大递归深度”而崩溃)结果:4321额外的风格提示:考虑将您的函数命名为list. 通常,您应该避免覆盖内置函数和类型的名称。

牛魔王的故事

由于缺乏明确的问题陈述,我应该投票结束你的问题,但无论如何......在 Python 中的对象中,如何传递当前对象的引用与处理任何对象的方式相同。对同一类的对象 b这实际上无关紧要,但无论如何......这样当我打电话给 b.parent 时,我可以回到对象 a?class Foo(object):    def __init__(self, parent=None):        self.parent = parenta = Foo()b = Foo(a)print(b.parent is a)现在,对于您没有问的问题的答案,请参阅(并接受)凯文的回答;-)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python