Je suis un débutant et je sais que ce programme C que j'ai obtenu quelque part sur Internet (crédits : http://www.geeksforgeeks.org/archives/28 ) fonctionne correctement.
#include<stdio.h>
float power(float x, int y)
{
float temp;
if( y == 0)
return 1;
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
else
{
if(y > 0)
return x*temp*temp;
else
return (temp*temp)/x;
}
}
/* Program to test function power */
int main()
{
float x=2;
int y=5;
printf("%f", power(x, y));
getchar();
return 0;
}
Je me demande simplement comment et pourquoi. J'ai posé mes questions/remarques dans un commentaire après la ligne de mon code dans cette fonction...
float temp;
if( y == 0)
return 1;
//this I understand because for instance 2^0 is 1
temp = power(x, y/2);
if (y%2 == 0)
return temp*temp;
//if y is even, eg. 2^4 then 2^2 * 2^2 is still equal to 16
else
{
if(y > 0)
//this part I don't get anymore. eg. 2^5, then temp=2^(5/2)
return x*temp*temp;
//2 * 2^(5/2) * 2^(5/2) how? this will become 64 but the answer is 32.
//but when I run the program it halts the right answer ie, 32
else
return (temp*temp)/x;
}
Veuillez m'expliquer ce qui s'est passé. J'ai peut-être raté quelque chose. Et aussi comment c'est devenu un O(lg n) durée. Nous vous remercions de votre attention.