4 svar
146 visningar
Aedrha behöver inte mer hjälp
Aedrha 96
Postad: 21 jul 2022 17:57

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!

Laguna Online 30472
Postad: 21 jul 2022 18:24

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.

Aedrha 96
Postad: 21 jul 2022 19:02

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;
        }
}
}
Laguna Online 30472
Postad: 21 jul 2022 19:31

Fungerar det med negativa x?

Aedrha 96
Postad: 21 jul 2022 21:57

 

	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!

Svara
Close