我刚刚完成edX入门课程MIT 6.00.1x的新手;以下是关于该课程期末考试的问题(现已结束,所以我可以寻求帮助)。让为什么递归函数前往双向链表不起作用?
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
其印刷的第一个节点的货物证明。但是无论何时nodeInList
是而不是链接列表中的第一个节点,返回值firstInList(node)
原来是None
而不是所需的第一个节点。这一结论是基于以下几点:如果,例如,该列表的第一个节点node1
有货1
,随后是node2
与货物2
,然后firstInList(node2) == None
计算为True
但firstInList(node2) == node1
评估为False
。呼叫firstInList(node2).getCargo()
将返回一个错误信息
Attribute Error: 'NoneType' object has no attribute 'getCargo'
另一个基准是firstInList(node1) == node1
评估为True
;至少,这是我所期望的。
这表明firstnode
发现没有以我想象的方式返回递归调用链。 任何人都可以解释为什么?
(请不要建议我使用迭代而不是递归。我知道该怎么做。我想了解的Python 2.7的行为的代码写的。)
[递归函数调用中返回语句的原因]的可能重复(http://programmers.stackexchange.com/questions/201765/reason-for-return-statement-in-recursive-function-call) – 2015-03-12 08:20:45