Structures de données et algorithmes
Une fonction fib(n) qui calcule les nombres de Fibonacci est définie par récursion : « si n vaut 1 ou moins, renvoyer n ; sinon, renvoyer fib(n−1) + fib(n−2) ». Quand on appelle fib(5), combien de fois fib est-elle appelée, premier appel compris ?
- A6
- B9
- C15
Afficher la réponse et l'explication
Réponse : C. 15
Soit C(n) le nombre d'appels pour fib(n). On a C(0) = C(1) = 1 et C(n) = 1 + C(n−1) + C(n−2), donc C(2) = 3, C(3) = 5, C(4) = 9 et C(5) = 15. Comme les mêmes valeurs sont recalculées encore et encore, le nombre d'appels croît exponentiellement avec n : fib(30) fait environ 2,69 millions d'appels. Avec la mémoïsation (une forme de programmation dynamique), qui conserve dans une table les valeurs déjà calculées, seules les six valeurs fib(0) à fib(5) sont calculées et le nombre d'appels tombe à 9 (2n − 1). 6 est le nombre d'arguments distincts, et 9 le nombre d'appels avec mémoïsation.
Continuer : 9 autres questions sur Structures de données et algorithmes