la complexité de temps pour la partie mult se trouve comme ceci:
pour calculer (mult ab), (un accum interne) est appelée jusqu'à ce qu'un = 1 donc nous avons une sorte de récursion de queue (boucle) qui itère sur a.
nous savons donc que la complexité temporelle de (mult ab) est O (a) (= complexité temporelle linéaire)
(à la mise sous tension de mn) dispose également d'un (interne x accum) définition, qui boucle également (jusqu'à x = 0)
donc à nouveau, nous avons O (x) (= complexité temporelle linéaire)
Mais: on n'a pas pris en compte le temps nécessaire pour les appels de fonction de l'interne ...
En interne, nous utilisons la définition (mult ab) qui est linéaire dans la complexité temporelle donc nous avons le cas suivant: dans la première itération mult est appelée avec: (mult 1 m) -> O (1)
deuxième itération cela devient: (mult mm) -> O (m)
troisième itération: (mult m² m) -> O (m * m) et ainsi de suite Il est clair que cela se développe jusqu'à n = 0 (ou en interne cela devient x = 0)
donc on peut dire que la complexité du temps dépendra m et n: O (m^n)
[modifier :] vous pouvez également jeter un oeil à une question connexe que j'ai posée plus tôt: Big O, how do you calculate/approximate it? qui peut vous donner une idée de comment vous pouvez gérer l'approximation plus généralement
Ceux-ci regardent, um, familier - ai-je écrit ceci pour vous une semaine ou il y a si longtemps? –
Observez votre style d'indentation? On pourrait penser que la fonction 'to-the-power-of 'fait partie de la fonction' mult' – Pierre