J'essaie de comprendre dans ma leçon comment lire la fonction ci-dessous appelée printBackward. Comment est-ce que lorsque je tape printBackward(node1)
et ma sortie est 3,2,1 ce qui est ce que c'est supposé faire. Je ne comprends tout simplement pas pourquoi. Voir ci-dessous comment je l'interprète et vous me école où je l'ai vu mal ...nœuds récursifs
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,
Alors disons que ... printBackward(node1)
au début, if list
doit être ignorée car node1 contient une référence à node2 donc nous allons à head = list
qui est node1. tail = list.next
que je vois comme node1.next = node2 donc tail = node2. Ensuite, nous arrivons à printBackward(tail)
qui est node2. À ce moment-là, que se passe-t-il? Est-ce qu'on refait tout ça? Je vois cela aller jusqu'à node3 qui à ce moment-là retournera None. Quand arrivons-nous à print head,
??? Nous faisons un appel récursif avant même d'arriver au print head,
? S'il vous plaît, éduquez-moi en essayant de comprendre les exemples qui me sont donnés dans ma leçon. Merci!
donc quand nous appelons printBackward (node3), si la liste THEN est égale à None, non? Donc, cela ne retournerait-il rien? Je regarde probablement passé l'évidence ici mais je ne vois pas comment ce code est configuré pour commencer à imprimer en arrière puisque nous avons atteint un node3 qui contient None qui me semble la fin du programme? –
Notez que vous n'êtes pas intéressé par la valeur de retour est ce code. vous appelez simplement printBackward(). Quand il revient, il revient seulement de cet appel spécifique. Si cela arrive à la fin, il retourne également None. Quoi qu'il en soit, cet appel renvoie None à chaque fois, c'est juste une question de QUAND il quitte la fonction – jdi
le problème que j'ai est de voir qu'il stocke node1 et node2 comme nous frappons node3 et l'imprimer. Donc, ça se construit sans imprimer jusqu'à ce que nous ayons atteint une liste qui n'a rien d'autre pour imprimer ce qui a été construit jusque là? Comment sait-il commencer avec 3,2,1 au lieu de 1,2,3? –