FONCTIONS RÉCURSIVES(1) TP
Fonctions récursives (1) – TP
11Définition 11.1 – Fonction récursive Une fonction est diterécursivesi elle s’appelle elle-même.
Une fonction récursive doit contenir une ou des conditions d’arrêt afin d’assurer que le programme s’arrête.
Python – Version itérative
1 def factorielleIter(n):
2 res = 1 # Initialisation
3 for i in range(n):
4 res = res * (i+1)
5 return res
Python – Version récursive
1 def factorielleRec(n):
2 if n == 0: # Condition d'arrêt
3 return 1
4 else :
5 p = factorielleRec(n-1)
6 return n * p
Exemple 11.1 Factorielle
Exercice 11.1
1. Sur feuille, calculer 5 ! en utilisant les deux fonctions et expliquer la contrainte qu’impose l’utilisation d’une fonction récursive.
2. Calculer 1000 ! avec les deux méthodes. Conclure.
Exercice 11.2
Écrire une fonction récursive qui affiche un compte à rebours. Le dernier message affiché sera :"Bonne année
!".
G. BOUTARD 1 Lycée GAY-LUSSAC
TP FONCTIONS RÉCURSIVES(1)
Exercice 11.3 – Recherche dichotomique
1. Rappeler le principe général de la recherche dichotomique d’un élément dans une liste.
2. Compléter le programme suivant.
Python
1 def auxiliaire(L,x,g,d):
2 """
3 Entrée : L (liste), x (valeur), g et d des entiers
4 Sortie : Booléen
5 La fonction renvoie True si la valeur x est dans la liste L[g:d+1]
6 et False sinon
7 """
8 if L==[]:
9 return ... # A compléter
10 elif d < g:
11 return ... # A compléter
12 else:
13 m = (d+g)//2
14 if L[m] == x:
15 return ... # A compléter
16 elif x < L[m]:
17 return auxiliaire(L,x,...,...) # A compléter
18 else:
19 return auxiliaire(L,x,...,...) # A compléter
20
21 def rechercheDichotomie(L,x):
22 g,d = ... # A compléter
23 return auxiliaire(L,x,g,d)
3. Expliquer l’intérêt de la fonction auxiliaire.
Les fonctions récursives, même si elles peuvent être gourmandes en espace mémoire, permettent cependant de résoudre certains problèmes de façon très simples, contrairement à une méthode itérative. C’est notamment le cas pour les tous de Hanoï.
Les tours de Hanoï sont un jeu de réflexion consistant à déplacer des disques de diamètres différents d’une tour de « départ » (tour 1) à une tour d’ « arrivée » (tour 3) en passant par une tour « intermédiaire » (tour 2), tout en respectant les règles suivantes :
• on ne peut déplacer plus d’un disque à la fois ;
• on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.
On suppose que cette dernière règle est également respec- tée dans la configuration de départ.
Remarque 11.1 – À lire après le TP
PCSI 2021 – 2022 2 G. BOUTARD
FONCTIONS RÉCURSIVES(1) TP
Python
1 def hanoi(n,tour1,tour2,tour3):
2 # Initialisation (1 disque)
3 if n==1:
4 print('Déplacer le disque de la tour',tour1,'à la tour',tour3)
5 else:
6 # Déplacer les n-1 premiers disques de tour1 à tour2 en utilisant tour3
7 hanoi(n-1,tour1,tour3,tour2)
8 # Déplacer le dernier disque (le plus grand) de tour1 à tour3 en utilisant tour3
9 print('Déplacer le disque de la tour',tour1,'à la tour',tour3)
10 # Déplacer les n-1 premiers disques de tour2 à tour3 en utilisant tour1
11 hanoi(n-1,tour2,tour1,tour3)
12
13 # Exemple
14 hanoi(5,"A","B","C")
G. BOUTARD 3 Lycée GAY-LUSSAC