Java

Fermé
ayaf Messages postés 3 Date d'inscription jeudi 27 octobre 2005 Statut Membre Dernière intervention 2 novembre 2005 - 27 oct. 2005 à 11:39
Misdrhaal Messages postés 49 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 23 février 2006 - 27 oct. 2005 à 14:33
Bonjour a tous,
Je suis Florence et j'etudie Informatique en Allemagne,ce qui n'est pas tres facile.J'aimerais avoir votre aide par rapport a cet exercice svp. Soit la methode suivante:

double p (double a,unsigned int n) (
double x;
if (n == 0)
return (1.0) ;
else (
if ((n & 1) == 1) // est ce n paire ?
return (a * p(a, n-1)) ;
else (
x = p(a, n/2) ;
return (x * x) ;
)
)
)
1. Que calcule t elle?
2.Quel est son temps de validite(nombre de multipications) ?

Excusez laforme decriture,mon clavier n est pas francais
Je compte sur votre aide et attends impatiemment vos reponses

Merci d avance, Florence
A voir également:

4 réponses

Misdrhaal Messages postés 49 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 23 février 2006 16
27 oct. 2005 à 12:15
pour la comprendre, il faut que tu te dises que c'est une fonction récursive :

au niveau du return, on appelle de nouveau la fonction mais cette fois avec un n plus petit (divisé par deux si n paire, n-1 sinon)

Donc si on regarde n impaire:
on va retourner
a*p(a,n-1)
Entrons maintenant dans p(a,n-1)
n-1 est pair, on va donc rester constamment dans le deuxieme test désormais.

on aura donc :
x=(a* [p(a,n/2)*p(a,n/2)])
Si on entre à nouveau dans la fonction suivante :
x=(a* [(p(a,(n/2)/2))^4)

etc etc...

Si je ne me suis pas trompé c'est ca (dans le cas d'un n paire enlever le a*)
Tu peux vérifier en prenant un papier et un crayon, c'est le mieux à fair epour les fonctions récursives, en tous cas voila l'idée.

son temps de validité et bien quand tu auras trouvé comment elle fonctionne, tu comprendras vite, à vue de nez je dirais que c'est une n-exponentielle, à confirmer.
0
Misdrhaal Messages postés 49 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 23 février 2006 16
27 oct. 2005 à 12:40
(Je n'ai pas pu éditer le message donc si des modos passent par là)

pour la comprendre, il faut que tu te dises que c'est une fonction récursive :

au niveau du return, on appelle de nouveau la fonction mais cette fois avec un n plus petit (divisé par deux si n pair, n-1 sinon)

Donc si on regarde n impaire:
on va retourner
a*p(a,n-1)
Entrons maintenant dans p(a,n-1)
n-1 est pair, on va donc rester constamment dans le deuxieme test désormais.

on aura donc :
x*x=[a* p(a,(n-1)/2) * a*p(a,(n-1)/2)]

un produit

on entre alors dans les deux fonctions :
x*x=[a* p(a,((n-1)/2/2))* p(a,((n-1)/2/2))] *[a* p(a,((n-1)/2/2))* p(a,((n-1)/2/2))]
d'où
x*x=[a* p(a,(n-1)/4)* p(a,(n-1)/4)] *[a* p(a,(n-1)/4)* (a,(n-1)/4)]
2 produits

On entre alors dans 4 fonctions identiques et chacune d'elle nous rammenera un produit de deux fonctions où n sera encore divisé par deux d'où
x*x=(a* [p(a,(n-1)/8)*p(a,(n-1)/8)]*[p(a,(n-1)/8*p(a,(n-1)/8)*(a* [p(a,(n-1)/8*p(a,(n-1)/8)]*[p(a,(n-1)/8*p(a,(n-1)/8])


etc etc
compter les produits :
à chaque appel de fonction, on double le nombre de produits de fonctions:
premiere iteration : un produit ( deux fonctions)
seconde iteration trois produits (4 fonctions)
troisieme : sept produits (8fonctions)
d'ou ( p^2)-1 (+2 si n pair)
avec p nombre d'itérations.
Ce nombre dépend de n;


Tu peux vérifier en prenant un papier et un crayon, c'est le mieux à fair epour les fonctions récursives, en tous cas voila l'idée.
0
Utilisateur anonyme
27 oct. 2005 à 14:12
Salut!

Cette fonction calcule a exposant n.

Temps de validité = n (n multiplications car à chaque passage, n est diminué de 1)

;-)
HackTrack
0
Misdrhaal Messages postés 49 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 23 février 2006 16
27 oct. 2005 à 14:33
oups désolé^^ je travaille trop :p

le sieur a raison
0