Académique Documents
Professionnel Documents
Culture Documents
TD d’évaluation de programme n◦ 5
Récursivité
alors :
1. Si f (n) = O(nlogb a− ) pour constante > 0, alors C(n) = Θ(nlogb a ).
2. Si f (n) = Θ(nlogb a ), alors C(n) = Θ(nlogb a log n).
On considère les deux méthodes suivantes pour calculer la puissance nième d’un nombre x :
1
4. Laquelle est la meilleure ?
5. On modifie maintenant le programme puissance2 afin de minimiser le nombre de variables
utilisées, on obtient alors la fonction puissance3 suivante :
float puissance3 (float x, int n){
float p;
if (n==0)
return(1);
else {
if(n%2 == 0)
return(puissance3(x,n/2)*puissance3(x,n/2));
else
return(x*puissance3(x,n/2)*puissance3(x,n/2));
}
}
Comment cette modification affecte-t-elle la complexité de l’algorithme ainsi obtenu
ci-dessus ?
Le problème des tours de Hanoï est un grand classique illustrant l’usage de la récursivité. On a 3
piquets A, B et C et n disques 1, 2, ..., n. En position initiale, tous les disques sont sur le piquet
A, chaque disque reposant sur un disque de taille plus grande. À chaque étape, on a le droit de
déplacer le disque du haut d’un piquet pour le mettre sur un autre piquet, à condition qu’un
disque ne soit jamais posé sur un disque plus petit. Le but du jeu est de déplacer les n disques
du piquet A au piquet B.
1. Proposer une solution dans les cas n = 1, 2, 3, 4 (c’est-à-dire, identifier la succession de
déplacements à réaliser pour passer les n disques du piquet A au piquet B).
2. On voit se dessiner une approche récursive. Proposer un algorithme pour ce problème.
3. Analyser le nombre de mouvements de disques.