Ceci est un cas de récursivité, vous appelez la fonction elle-même encore et encore avec des sous-chaînes de plus en plus courtes de l'entrée originale, jusqu'à ce qu'elle soit une chaîne de longueur 1 (la dernière dans l'entrée d'origine) il commence à l'imprimer puis à "dérouler" et à imprimer le reste de la chaîne à l'envers.
Jetez un oeil à ce code annotée:
def function(s):
if len(s) == 1:
print 'single:', s[0], # (A) this is where your first output is generated for a single character
else:
print 'calling function again with ',s[1:]
function(s[1:]) # (B) you call function again, i.e., your recursive call
print ' unwind->', s[0], # (C) the "unwinding" step, i.e, finish the rest
# of the function when you return from the recursive call
la sortie que vous obtenez est:
calling function again with 234
calling function again with 34
calling function again with 4
single: 4 unwind-> 3 unwind-> 2 unwind-> 1
La première fois que vous appelez la fonction que vous laissez tomber par la clause else
et ligne (B) vous appelez à nouveau la fonction, mais cette fois avec "234". Maintenant, la fonction redémarre mais avec "234" et de nouveau vous passez au else
et appelez à nouveau la fonction, mais maintenant avec "34", la fonction s'exécute à nouveau, maintenant avec vous passez à la else
une fois de plus et appelez la fonction avec juste "4" ... cette fois-ci, car elle est de longueur 1, vous l'imprimez (ligne A).
Maintenant vous revenez de cette fonction (le processus de déroulement) - et reprenez à l'endroit où vous étiez avant de faire votre appel récursif et vous imprimez le reste de la chaîne à l'envers en imprimant le premier caractère du caractère restant (ligne C).
La récursion peut être difficile à saisir la première fois que vous la rencontrez - c'est parfaitement normal. À un certain moment, il va cliquer et devenir clair. Vous voudrez peut-être faire quelques lectures sur le concept général et chercher des exemples clairs annotés (la plupart des livres de programmation/CS en auront).
Voici une courte vidéo YouTube qui explique récursivité en Python avec un exemple simple, espérons qu'il aide: http://www.youtube.com/watch?v=72hal4Cp_2I
Je suis toujours perdu. Je ne comprends pas vraiment la récursion non plus. N'est-ce pas si vous appelez la fonction à nouveau, il continuerait à l'appeler et rien ne serait imprimé car la longueur de s [1:] n'est jamais 1? – VPNTIME
@Omerta ce qui vous manque est que 's' est un * s' * différent chaque fois que' function' est appelé. Une fois que vous avez cela, 'len (s [1:])' fait, finalement, aller à 1. – lvc
Merci Levon. Je l'obtiens vraiment maintenant. – VPNTIME