Adloun

Combien d'appels coûte le chevauchement

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 5 — Récursivité

Énoncé

Le cours montre l'arbre des appels de fib 4 et annonce un coût exponentiel. Établir la formule exacte : si est le nombre d'appels engendrés par fib n, montrer que , où est la suite de Fibonacci.


let rec fib n = if n < 2 then n else fib (n-1) + fib (n-2)

Corrigé

Démonstration, par récurrence forte sur .

Base. (un seul appel, celui du sommet). Et , . La formule tient.

Hérédité. Pour , l'appel au sommet en engendre deux : . Par hypothèse,

Vérification, mesurée en instrumentant la fonction :


n :        4     6     8    10    12     20      25       30
appels :   9    25    67   177   465  21891  242785  2692537
2F(n+1)-1: 9    25    67   177   465  21891  242785  2692537

Ce que la formule dit. Comme avec , le nombre d'appels est : exponentiel. Pour , deux millions et demi d'appels pour calculer un nombre à sept chiffres.

Et la conclusion à ne pas tirer. Ce n'est pas « la récursivité est chère ». Le nombre de valeurs distinctes en jeu est ; c'est le chevauchement qui est cher, c'est-à-dire le fait de recalculer autant de fois qu'il apparaît dans l'arbre. Retenir les valeurs déjà calculées ramène le coût à sans changer une ligne de la décomposition : c'est toute la programmation dynamique du chapitre chap:dynamique.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.