gpt4 book ai didi

python - 为什么移动到双向链表前面的递归函数不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:35 24 4
gpt4 key购买 nike

我是新手,刚学完edX的入门类(class)MIT 6.00.1x;以下是关于该类(class)期末考试的问题(现已结束,因此我可以寻求帮助)。让

def class DLLNode(object):
def __init__(self, name):
self.cargo = cargo
self.before = None
self.after = None
def setBefore(self, before): self.before = before
def setAfter(self, after): self.after = after
def getBefore(self): return self.before
def getAfter(self): return self.after
def getCargo(self): return self.cargo

用于创建双向链表。假设 node 是出现在双向链表中的 DLLNode 类的实例。然后 node.getBefore() 返回该 node 在列表中的直接前任,除了它返回 None 如果 node 位于列表的前面,因此没有前导。

我写了一个递归函数

def firstInList(nodeInList):
""" Prints out the cargo carried by the first node in that doubly linked list
of which nodeInList is a part. Returns that first node. """

if nodeInList.getBefore() == None:
firstnode = nodeInList
print firstnode.getCargo()
return firstnode
# nodeInList.getBefore() is not None, so nodeInList has an immediate predecessor
# on which firstInList can be be called.
firstInList(nodeInList.getBefore())

我希望返回双向链表中的第一个节点,作为参数给定列表中的已知节点 nodeInList

我的问题: firstInList 到达了正确的第一个节点,无论使用的是什么特定的 nodeInList,它都打印第一个节点的 cargo 证明了这一点.但是每当 nodeInList 不是链表中的第一个节点时,firstInList(node) 的返回值就会变成 None 而不是所需的第一个节点。此结论基于以下内容:例如,如果列表的第一个节点 node1 有 cargo 1,然后是 node2 和 cargo 2,然后 firstInList(node2) == None 评估为 TruefirstInList(node2) == node1 评估为错误。调用 firstInList(node2).getCargo() 将返回一条错误消息

Attribute Error: 'NoneType' object has no attribute 'getCargo'

另一个数据是 firstInList(node1) == node1 的计算结果为 True;至少,这是我所期望的。

这表明找到的 firstnode 没有按照我想象的方式返回递归调用链。 谁能解释为什么?

(请不要建议我使用迭代而不是递归。我知道该怎么做。我正在尝试理解 Python 2.7 对编写的代码的行为。)

最佳答案

好吧,看起来你没有返回递归的结果,所以函数在所有情况下都会返回,但退化只是返回默认的未初始化值。

最后一行应该是:

return firstInList(nodeInList.getBefore())

关于python - 为什么移动到双向链表前面的递归函数不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29033695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com