En supposant n est un entier positif, la fonction composite fonctionne comme suit:complexité temporelle de la fonction composite en termes de n
(define (composite? n)
(define (iter i)
(cond ((= i n) #f)
((= (remainder n i) 0) #t)
(else (iter (+ i 1)))))
(iter 2))
Il me semble que la complexité du temps (avec une limite étanche) est ici O (n) ou plutôt gros thêta (n). Je suis juste en train de le regarder en ce moment. Puisque nous ajoutons 1 à l'argument de iter à chaque fois que nous passons en boucle, il semble que ce soit O (n). Y a-t-il une meilleure explication?
Vous l'avez. Vous augmentez de 1 chaque appel récursif jusqu'à un maximum de «n», puis arrêtez. Si vous supposez que l'opération de division est à temps constant, vous faites O (1) travailler chaque boucle pour un total de O (n). Cependant, ce n'est qu'une limite supérieure, car certaines entrées s'arrêtent tout de suite. Si '= n 800', par exemple, vous arrêtez sur la première boucle où' (remainder ni) 'est 0. – japreiss
À droite, si' n' est premier, la récursion va jusqu'à 'n',' n- 1' étapes. Mais si 'n 'est composite, il prend au plus' sqrt (n)' pas. –