В своем уроке я пытаюсь понять, как читать приведенную ниже функцию с именем printBackward. Как получается, что когда я печатаю printBackward(node1)
, и у меня выводится 3,2,1, это то, что он должен делать. Я просто не понимаю, почему это так. Посмотрите ниже, как я интерпретирую это, и, пожалуйста, учите меня, где я увидел это неправильно ...
class Node:
def __init__(self, cargo = None, next = None): # optional parameters. cargo and the link(next) are set to None.
self.cargo = cargo
self.next = next
def __str__(self):
return str(self.cargo)
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node1.next = node2
node2.next = node3
# Exercise
def printList(node):
print "[",
while node:
print node,
node = node.next
if node != None:
print ",",
print "]",
print
def printBackward(list):
if list == None: return
head = list
tail = list.next
printBackward(tail)
print head,
Итак, скажем ... printBackward(node1)
сначала, if list
следует игнорировать, поскольку узел1 содержит ссылку на узел2, поэтому мы переходим к head = list
, который является узлом1. tail = list.next
который я вижу как node1.next = node2, так что tail = node2. Затем мы получаем printBackward(tail)
, который является node2. В этот момент, что происходит? Мы делаем это снова и снова? Я вижу, что это происходит до узла 3, который в этот момент вернет None. Когда мы доберемся до print head,
??? Мы делаем рекурсивный вызов еще до того, как доберемся до print head,
? Пожалуйста, научите меня, как я пытаюсь понять примеры, которые даны мне в моем уроке. Спасибо!