Rekursiv potensfunktion med en knepig definition.
Hej Allesammans sitter och ska skriva en metod som räknar ut potensfunktionen xn enligt följande definition:
x0 = 1
xn= (xn/2)2 om n är jämnt
xn= x ∗ (xn/2)2 om n är udda
Där n är ett heltal(int). Jag förstår var för det blir så, med heltals division i Java så avrundar man alltid mot noll.
Så här står det i uppgiftsbeskrivningen efter det:
"Gör klart den nya implementeringen av metoden enligt denna definition. Observera att metoden bara ska innehålla ett rekursivt anrop. Resultatet ska sparas i den lokala variabeln r som sedan användas i multiplikationen. Görs samma rekursiva anrop flera gånger har man inte vunnit något."
public static double power(double x, int n) {
if (n == 0) {
return 1;
} else {
double r = // fyll i egen kod
// fyll i egen kod
}
Jag förstår inte riktigt hur jag ska göra detta med ett rekursivt anrop.
för jag tänker:
public static double power(double x, int n) {
if (n == 0) {
return 1;
}
if(n%2==1){
return x*power(x,n/2)*power(x,n/2);
}
else{
return power(x,n/2)*power(x,n/2);
}
}
Men där gör jag väl mer än ett rekursivt anrop och jag använder inte den här jäkla variabeln r.
Jag begriper inte riktigt vad som menas och uppskattar om någon kan ge mig förtydligande.
Tack!
Det rekursiva anrop som du gör flera gånger räknar ut samma sak varje gång, så meningen med r är att du ska göra anropet en gång, sätta r till resultatet och sedan fortsätta.
Koden kompileras och exekveras utan fel, men är det så det är meningen att lösas?
public static double power(double x, int n) {
if (n == 0) {
return 1;
} else {
double r = Math.pow(power(x,(n/2)),2.0);
if(n%2==1){
return x*r;
}else{
return r;
}
}
}
Fungerar det med negativa x?
public static double power2(double x, int n) {
if(n<0) {
return 1/power2(x,Math.abs(n));
}
if (n == 0) {
return 1;
} else {
double r = Math.pow(power2(x,(n/2)),2.0);
if(n%2==1){
return x*r;
}else{
return r;
}
}
}
Tar både negativa x och negativa n när jag testar.
Tack så jätte mycket för hjälpen!