Académique Documents
Professionnel Documents
Culture Documents
Récursion
Problème
A
Récursion
Sous-problème
Problème
A
Récursion
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Un problème peut se diviser en sous problèmes moins complexes mais ne même natures.
Récursion
Sous-(sous-) problème
C
Sous-problème
B
Problème
A
Un problème peut se diviser en sous problèmes moins complexes mais ne même natures.
Les sous-problèmes peuvent également se diviser en autres sous problèmes jusqu’à ce qu’un
sous problème ai une solution évidente.
Compte à rebours récursif
compte_a_rebours(5)
Python Tutor
Compte à rebours récursif
compte_a_rebours(4)
Python Tutor
Compte à rebours récursif
compte_a_rebours(4)
Compte à rebours récursif
compte_a_rebours(4) compte_a_rebours(4)
Compte à rebours récursif
compte_a_rebours(4) compte_a_rebours(4)
Compte à rebours récursif
compte_a_rebours(4) compte_a_rebours(4)
Compte à rebours récursif
compte_a_rebours(4)
Compte à rebours récursif
compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(4)
Quand une fonction termine son exécution, elle est automatiquement retirée du sommet de la pile (on
dit que la fonction est dépilée).
Compte à rebours récursif
Autre solution en utilisant la récursivité : def compte_a_rebours (n):
if n <=0 :
pass
else :
print(n,end=" ")
compte_a_rebours (n-1)
compte_a_rebours(4)
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(3)
Écrire 3 Écrire 3
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Écrire 3
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Appel de compte_a_rebours(2)
Écrire 3
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
compte_a_rebours(2)
Appel de compte_a_rebours(2)
compte_a_rebours(3)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
compte_a_rebours(3)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
compte_a_rebours(3)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
compte_a_rebours(1) compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Écrire 1
Appel de compte_a_rebours(2) compte_a_rebours(1)
compte_a_rebours(3)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
compte_a_rebours(0)
Appel de compte_a_rebours(2) compte_a_rebours(1)
compte_a_rebours(3)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2 pass
compte_a_rebours(2)
compte_a_rebours(0)
Appel de compte_a_rebours(2) compte_a_rebours(1)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
compte_a_rebours(0)
Appel de compte_a_rebours(2) compte_a_rebours(1)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
compte_a_rebours(0)
Appel de compte_a_rebours(2) compte_a_rebours(1)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3 compte_a_rebours(2)
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3
compte_a_rebours(3)
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3
compte_a_rebours(3)
Appel de compte_a_rebours(3)
compte_a_rebours(4)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
Appel de compte_a_rebours(1)
Écrire 2
compte_a_rebours(2)
Appel de compte_a_rebours(2)
Écrire 3
compte_a_rebours(3)
Appel de compte_a_rebours(3)
Écrire 4
compte_a_rebours(4)
Appel de compte_a_rebours(4)
def compter(n) :
if n <= 0: #cas simple
pass #solution immédiate
else :
compter(n-1) #solution récursive
print(n,end=" ")
Python Tutor
Somme récursive
Sommer les premiers entiers naturels
●
Entrée: un entier naturel n (non nul).
●
Sortie : la somme 1+2+3+...+n.
Somme récursive
Sommer les premiers entiers naturels
●
Entrée: un entier naturel n (non nul).
●
Sortie : la somme 1+2+3+...+n.
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
Python Tutor
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(5)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(4)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(3)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(2)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(1)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(1) 1+somme_entiers(0)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(0)
somme_entiers(1) 1+somme_entiers(0)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(0) somme_entiers(0)
somme_entiers(1) 1+somme_entiers(0)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(0) somme_entiers(0)=0
somme_entiers(1) 1+somme_entiers(0)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(0)=0
somme_entiers(1) 1+somme_entiers(0)
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(0)=0
somme_entiers(1) 1+somme_entiers(0)=1
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
1+somme_entiers(0)=1
somme_entiers(2) 2+somme_entiers(1)
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
1+somme_entiers(0)=1
somme_entiers(2) 2+somme_entiers(1)=3
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
2+somme_entiers(1)=3
somme_entiers(3) 3+somme_entiers(2)
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
2+somme_entiers(1)=3
somme_entiers(3) 3+somme_entiers(2)=6
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
3+somme_entiers(2)=6
somme_entiers(4) 4+somme_entiers(3)
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
3+somme_entiers(2)=6
somme_entiers(4) 4+somme_entiers(3)=10
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
4+somme_entiers(3)=10
somme_entiers(5) 5+somme_entiers(4)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
4+somme_entiers(3)=10
somme_entiers(5) 5+somme_entiers(4)=15
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
5+somme_entiers(4)=15
resultat = 15
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme_entiers(0) somme_entiers(0)=0
somme_entiers(1) 1+somme_entiers(0)=1
somme_entiers(2) 2+somme_entiers(1)=3
somme_entiers(3) 3+somme_entiers(2)=6
somme_entiers(4) 4+somme_entiers(3)=10
somme_entiers(5) 5+somme_entiers(4)=15
resultat = 15
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
Somme récursive
def somme_entiers(n) :
if n == 0 :
return 0
else :
return (n+somme_entiers(n-1))
resultat = somme_entiers(5)
print(resultat)
somme(5)
= 5 + somme(4)
= 5 + 4 + somme(3))
= 5 + (4 + (3 + somme(2)))
= 5 + (4 + (3 + (2 + somme(1))))
= 5 + (4 + (3 + (2 + (1 + somme(0))))) or somme(0) = 0
= 5 + (4 + (3 + (2 + (1 + 0))))
donc somme(5) = 5 + (4 + (3 + (2 + (1 + 0))))
Tours de Hanoï
Les tours de Hanoï sont un jeu inventé par Édouard Lucas en 1883. Ce jeu dérive d’une légende
hindou.
Le principe est le suivant: on considère 3 piquets et n anneaux de diamètres différents empilés sur un
même piquet du plus grand au plus petit.
Il faut déplacer l’ensemble de la pile d’un piquet à un autre en respectant les principes suivants :
●
On ne déplace qu’un seul disque à la fois.
●
On ne peut poser un disque que sur un emplacement vide ou un disque de diamètre plus grand.
Avec 3 anneaux :
A B C A B C
Tours de Hanoï
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C
A B C A B C