Witam,
poniższy program liczy potęgi liczb. Działać działa.
#include <stdio.h>
// x - liczba potegowana
// n - wykladnik
double intpower(double x, int n)
{
double tmp; // - zmienna do obliczen
double answer; // - wynik
if(n==0) { answer=1; }
else if(n==1) { answer=x; }
else if(n%2==0) {
tmp = intpower(x , n/2);
answer=tmp*tmp;
} else {
tmp = intpower(x , n/2*x);
answer=tmp*tmp;
}
return answer;
}
main()
{
double x;
int n;
printf("Podaj liczbe potegowana: ");
scanf("%lf" , &x);
printf("Podaj wykladnik: ");
scanf("%d" , &n);
printf("%lf \n", intpower(x,n));
}
Tylko mógłby mi ktoś wytłumaczyć na jakiej zasadzie działa ten kod:
tmp = intpower(x , n/2);
answer=tmp*tmp;
O co chodzi z tym sprawdzaniem potęgi czy jest parzysta? Bo jeśli jest to czemu trzeba wprowadzić jako wykładnik to n/2. I jaki wynik jest równy tmp, że trzeba go pomnożyć przez siebie (druga część)? I to samo przy sprawdzaniu czy wykładnik nie jest parzysty. Dlaczego jest coś takiego - n/2*x?