
ICC Semaine 3 
Semaine 2 : algorithme / ingrédients de base / complexité 
Semaine 3 : Conception d’algorithmes : Récursivité et programmation dynamique 
 
Une approche fréquente pour résoudre un problème est de le décomposer en sous-
problèmes, chacun plus simple à résoudre. 
 
Une classe particulière d’algorithmes qui fonctionnent sur ce principe sont les 
algorithmes récursifs : algo qui fait appel à lui-même 
 
Ex : calcul de la somme des n premiers nombres entiers  
VERSION ITERATIVE : 
  Entrée : nombre entier positif n 
  Sortie : S(n)=
  
   
 i  0 
  Pour i allant de 1 à n 
    x  x + i 
  Sortir x 
 
VERSION ALGO RECURSIF : Algo_rec 
  Entrée : nombre entier positif n 
  Sortie : S(n) 
 
  Si n + 1, sortir 1           ≫≫ C’est la condition d’arrêt, OBLIGATOIRE ‼ 
  Sortir n + algo_rec(n-1)   ≫ Fait appel à lui même et test avec la valeur (n-1) 
 
Si n=3 > n  1 
Sortir 3 + algo_rec (2) 
N  1 
Sortir 2 + algo_rec(1) 
N=1 donc sort 1 
    2+1 = 3 
3+3=6 
 
 
Recherche d’un élément dans une liste ordonnée 
 
Soit L une liste ordonnée : L = {-40, -12, 3, 17, 22, 40, 41, 57} 
x un nombre entier 
On aimerait savoir si x   ? 
ALGO DE DICHOTOMIE  Prendre toute la liste, la diviser par 2 pour travailler sur une 
plus petite liste 
  Entrée : liste L ordonnée, taille n, nombre x 
  Sortie : x  ? 
Si n = 1 { si x = L(1), sortir oui, sinon, sortir non} ≫ si la taille de ma liste est de 1 
m = n/2 ≫ partie entière supérieure 
Si x ≤ L(n), sortir dichotomie (L(1 ; m), m, x) ≫L(1 ; m) est la première partie de la liste 
Sinon sortir dichotomie (L(m+1 ; n), (n-m) ; x)