Feuille d`exercices No 3 Bis - Récursivité

publicité
Deuxième semestre 2009-2010
Université Paris 7
Licence 1re année
CF2 - Calcul Formel
[email protected]
Feuille d'exercices No 3 Bis - Récursivité
Exercice 1 : Suite de Fibonacci : On dénit F0 = 0, F1 = 1 et Fn = Fn−1 + Fn−2 , pour
n ≥ 2. Construire une procédure récursive fibo qui calcule le n-ième nombre de Fibonacci
Fn . Evaluer le temps de calcul de F20 de la manière suivante :
[> u:=time(); fibo(20); time()-u;.
Modier la procédure précédente en introduisant option remember; dans la procédure.
Evaluer de la même manière le temps de calcul. Commenter.
Ecrire une autre procédure itérative fiboiter qui calcule Fn . Evaluer le temps de
calcul.
Exercice 2 : Exponentiation
rapide : Soit x réel. On souhaite calculer de manière efcace (ie. en minimisant le nombre de calculs) xn pour n entier naturel. L'algorithme
d'exponentiation rapide repose sur le calcul suivant :
(
n
x =
x 2 .x 2 ,
si
n pair
n−1
n−1
2
2
x
.x
.x si n impair.
n
n
1. Combien de multiplications eectue-t-on en eectuant naïvement le calcul de xn ?
2. Combien de calculs eectue-t-on, au pire, dans l'algorithme d'exponentiation rapide ?
3. Ecrire une procédure récursive eectuant le calcul de xn selon le principe de l'exponentiation rapide.
4. Procéder de même en rédigeant cette fois-ci une procédure itérative.
Exercice 3 : Algorithme
d'Euclide : Pour deux entiers a, b, il existe un unique entier
d tel que d divise a et b et tel que, si u divise a et b, alors u divise d. d est le PGCD
Grand Commun Diviseur) de a et b. Ainsi, le P GCD de 60 et 45 est 15.
positif
(Plus
1. Quel est le P GCD de a et de 0 ?
2. Pour b non nul, soit r le reste de la division entière de a par b (fonction Maple
irem(a, b)). Prouver que P GCD(a, b) = P GCD(b, r). Noter que |r| < |b|.
3. En utilisant les questions précédentes, construire une procédure récursive Pgcd(a, b)
qui renvoie le P GCD de a et b (Algorithme d'Euclide ).
4. Donner une version itérative Pgcd_it(a,b) de la procédure.
Exercice 4 : Identité de Bezout (Algorithme d'Euclide étendu) : Si d est le P GCD de
a et b, un résultat d'arithmétique nous dit qu'il existe un couple (u, v) tel que
d = u × a + v × b,
(identité
de Bezout
).
Reprendre l'idée de la procédure Pgcd et en déduire une procédure récursive Bezout(a, b)
qui renvoie une liste [u, v] de coecients de l'identité de Bezout.
Ainsi : 3 = P GCD(9, 15). Bezout(9, 15) doit renvoyer une liste [u, v] telle que 3 =
u × 9 + v × 15.
1
(Indications : Avec les notations ci-dessus : en supposant b non nul et la division entière
a = q × b + r, on a :
d = u × a + v × b = u × (q × b + r) + v × b = (u × q + v) × b + u × r.
Ainsi le calcul de Bezout(a, b) = [u,v] se ramène au calcul de Bezout(b, r) = [u*q+v,
u]. On choisira une valeur adéquate pour Bezout(a,0).)
Exercice 5 : Écrire une version itérative Bezout_it(a, b) de la procédure ci-dessus.
2
Téléchargement