Structures de données et algorithmes
Une fonction f(x, y) est définie par « si y vaut 0, renvoyer x ; sinon, renvoyer f(y, x mod y) ». Quand on appelle f(84, 36), quelle est la valeur renvoyée, et combien de fois f est-elle appelée, premier appel compris ?
- ARenvoie 12 ; appelée 3 fois
- BRenvoie 12 ; appelée 4 fois
- CRenvoie 6 ; appelée 3 fois
Afficher la réponse et l'explication
Réponse : A. Renvoie 12 ; appelée 3 fois
f(84, 36) appelle f(36, 12) car 84 mod 36 = 12 ; celle-ci appelle f(12, 0) car 36 mod 12 = 0 ; et comme y vaut 0, elle renvoie 12. Les appels sont f(84, 36), f(36, 12) et f(12, 0), trois au total : il s'agit de l'algorithme d'Euclide pour le plus grand commun diviseur. Comme la fonction renvoie directement le résultat de son appel récursif (récursion terminale), un compilateur qui effectue l'optimisation des appels terminaux peut la transformer en boucle, si bien qu'elle ne consomme pas de plus en plus d'espace sur la pile, quelle que soit la profondeur de la récursion.
Continuer : 9 autres questions sur Structures de données et algorithmes