Travaux Dirigés d’algorithmique n
o4
Cours d’analyse, algorithmique
—Master 2 CCI—
xExercice 1.Pour chacune des fonctions suivantes, l’exécuter à la main sur un exemple, justifier si elle termine ou non en général, et si oui dire ce qu’elle fait ou calcule.
// f est appelee avec n >= 0 public static int f(int n) {
if (n == 0) return 1;
else return f(n+1);
}
// sommeBis est appelee avec n < 0 public static int sommeBis(int n) {
if (n == 0) return 0;
else {
int result = sommeBis(n-1);
result += n;
return result;
} }
// g est appelee avec n >= 0 public static int g(int n) {
if (n <= 1) return 1;
else return 1 + g(n-2);
}
xExercice 2.Construire la forme récursive de la fonction g() définie ci-dessous.
public static void g(int n){
for(int i = 0; i < n; i++) System.out.println(i);
return; }
xExercice 3. Écrire une fonction récursive qui calcule la somme de nombres de1 a n, si n > 0 et renvoie0 sinon.
xExercice 4. Donner un algorithme récursif pour calculer xn , x et n positifs non nuls. Peut-on calculerxn avec moins de multiplications ?
xExercice 5.Écrire une fonction récursivepgcd(m, n)qui calcule le plus grand diviseur commun des deux entiers (non-négatifs)met n.
1
xExercice 6.(Triangle de Pascal).
Calculer directement par récursivité les combinaisons :Cnp =Cn−1p−1+Cn−1p pour n et pdonnés, avec0< p < nConditions limites :C00= 1 =Ci0=Cii
xExercice 7. (Chiffres en base 10). Écrire un algorithme récursif qui prends un paramètren et qui teste si ncontient au moins un zéro dans son écriture en base 10. On fait ici la convention que l’écriture en base 10 de zéro est zéro.
xExercice 8. (Récursion mutuelle).
On considère les fonctions mutuellement récursives suivantes :
def u(n):
if n == 0:
return 1 else:
return u(n-1)+v(n-1) def v(n):
if n == 0:
return 0 else:
return 2*u(n-1)+v(n-1) 1. Calculeru0, u1, u2, u3, v0, v1, v2et v3.
2. Donner les récurrences vérifiées par les suites(un)et (vn)et montrer que la suite(un)vérifie la récurrence,un+2= 2un+1+un.
xExercice 9.Décrire une fonction récursive qui, étant donné un entierX, détermine la valeur la plus proche deX dans un tableau d’entiers.
xExercice 10.
On considère la suite de Lucas définie parL0= 2,l1= 1, et pourn >0, Ln+2=Ln+1+Ln. 1. Écrire une fonction récursive qui calculeLn en fonction den.
On admet que
Ln= 1 +√ 5 2
!n
+ 1−√ 5 2
!n
.
2. Quel est la complexité de cette algorithme ?
3. En utilisant une fonction à deux paramètres écrire un algorithme dont la complexité estΘ(n).
4. Peut-on faire mieux ?
2