J'essaie de mieux comprendre la récursivité et le fonctionnement des déclarations de retour. En tant que tel, je regarde un morceau de code destiné à identifier le numéro de fibonacci associé à un terme donné - dans ce cas, 4. J'ai du mal à comprendre la déclaration else.
def f(n):
if n == 0:
return 0
if n == 1:
return 1
else:
return f(n-1) + f(n-2)
f(4)
J'ai essayé d'utiliser Visualize Python pour examiner ce qui se passe à chaque étape, mais je me perds quand il atteint l'instruction else.
On dirait qu’il faut prendre la valeur de n et soustraire 1 pour créer une nouvelle valeur n de 3 qu’il renvoie à la définition de la fonction. Donc, il semble ne renvoyer que la valeur de la première fonction de l'instruction else. Cependant, l'instruction else est écrite pour renvoyer la somme de 2 fonctions f(n-1) + f (n-2), auquel cas je pensais que la valeur de retour serait 5? Pouvez-vous même ajouter 2 fonctions ensemble?
Merci d'avance pour votre aide.
Voici un lien vers le code dans Visualize Python Somme de 2 fonctions
L'ajout de quelques déclarations d'impression peut également aider à clarifier la séquence:
def f(n):
print("Number received:", n)
if n == 0:
return 0
if n == 1:
return 1
else:
print("---- First recursion ----")
a = f(n-1)
print("---- Second recursion ----")
b = f(n-2)
print(" a=:",a,"; b=",b,"; returning:", a+b)
return a + b
print("Final f(4)=", f(4))
Sortie:
Number received: 4
---- First recursion ----
Number received: 3
---- First recursion ----
Number received: 2
---- First recursion ----
Number received: 1
---- Second recursion ----
Number received: 0
a=: 1 ; b= 0 ; returning: 1
---- Second recursion ----
Number received: 1
a=: 1 ; b= 1 ; returning: 2
---- Second recursion ----
Number received: 2
---- First recursion ----
Number received: 1
---- Second recursion ----
Number received: 0
a=: 1 ; b= 0 ; returning: 1
a=: 2 ; b= 1 ; returning: 3
Final f(4)= 3