Potenzfunktion

Status
Nicht offen für weitere Antworten.
N

Nooblearning

Gast
Hallo an alle,
ich bin noch neu in der Java Welt und hoffe um Rat.
Die Aufgabe unseres Profs. lautet:
Schreiben Sie eine rekursive Methode, welche die Potenreihe für x^n bis x^max ausgibt, wobei x,n und max
positive natürliche Zahlen sind. Die Methode soll den Rückgabewert void aufweisen-das Ergebnis wird also
nicht zurückgeliefert.

Beispiel für x=5,n=0,max=4

5^0=1
.
.
.
5^4=625

Meine Lösung bis jetzt ist dies:
[JAVA=0]package aufg1;

class expo{

public void doit(int x,int n,int max){
int erg=x;
if(max>=n){
//for(int i=0;i<max;i++){
erg*=x;
System.out.println(erg);
doit(x,n+1,max);
}
}
}
//}
public class Potenz {
public static void main(String[]args){
expo ex = new expo();
ex.doit(5,0,4);
}
}[/code]

ich hoffe um Verständnist und bitte nicht lachen wenn zu viel falsch ist ^^
mein genaueres Problem liegt daran das ich nicht genau weißt wie ich die hochzahlen programmieren kann ...-_-

VIELEN DANK
 

Sempah

Bekanntes Mitglied
Java:
	public static void doit(int x, int n, int max) {
		if (n <= max) {
			System.out.println(Math.pow((double)x, (double)n));
			n++;
			doit(x, n, max);				
		}
	}
	
	public static void main(String[] args) {
		doit(5, 0, 4);
	}

So vlt?
 
N

Nooblearning

Gast
vielen Dank für die schnelle Antwort, aber wir sollen das ohne diese Funktion von Java machen also selber sowas entwickeln...
Sry das ich es vergessen habe zu erwähnen
 
N

Nooblearning

Gast
Vielen Dank für die Lösung Sempah, die gefällt mir,aber wir sollen das ohne diese Funktion Math.pow machen
 

Sempah

Bekanntes Mitglied
Darfst du dir diese selbst schreiben?

Java:
	public static void doit(int x, int n, int max) {
		if (n <= max) {
			System.out.println(selfPow(x, n));
			
			int ergebnis = 0;
			for (int i = 0; i <= max-n; i++) {
				ergebnis *= x;
			}
			
			n++;
			doit(x, n, max);				
		}
	}
	
	public static void main(String[] args) {
		doit(5, 0, 4);
	}
	
	public static int selfPow(int x, int n) {
		int ergebnis = 1;
		for (int i = 0; i < n; i++) {
			ergebnis *= x;
		}
		return ergebnis;
	}

?
 

icarus2

Top Contributor
Jo, vielleicht die Parameter etwas klarer deklarieren:

[Java]
public static double power(int base, int exponent){

double result = 1;

for(int i = 0; i < exponent; i++){
result *= base;
}

return result;
}
[/Java]

PS:
Bei der Methode fehlt nur noch, dass eine Exception geworfen wird, wenn die Basis und der Exponent 0 ist. 0^0 ist nämlich nicht definiert.
 

partsch

Aktives Mitglied
Java:
public class Potenz {

		
		public static void main(String...args){
			pow(2, 3, 6);
		}
	
		public static void pow(int x, int n, int max){
			int neXx = simplePow(x, n, 1);
			complexPow(x, neXx, n, max);
		}
		
		private static int complexPow(int base, int result, int ex, int max){
			System.out.println(base+"^"+ex+"="+result);
			if(ex < max){
				result *= base;
				complexPow(base, result, ex+1, max);
			}
			return 1;
		}
		
		private static int simplePow(int base, int ex, int result){
			if(ex>0){
				result *= base;
				if(ex == 1)
					return result;
				return simplePow(base, ex-1, result);
			}
			return 1;
		}
}
 
N

Nooblearning

Gast
VIELEN VIELEN DANK für die zahlreichen Lösungsvorschläge die von Sempah finde ich am besten, weil sie noch zumteil auf meins aufbasiert. Die von Partsch ist mir etwas zu HEAVY ;-), aber bin trotzdem sehr dankbar dafür.... das mit exceptions ist noch irrelevant da wir das noch nicht beachten müssen...
Ich bedanke mich an alle die geantwortet haben, falls noch jemand lösungsvorschläge anzubieten hat würde mich das interessieren.
Ich werde nun diesen Topic als gelöst makieren da das von Sempah funktioniert...

@Sempah das macht doch kein Unterschied wenn ich die Selfpow methode über der main methode schreibe oder ? und wie war eigentlicht mein Lösungsansatz für ein Anfänger ? war es gut schlecht oder vollkommen falsch ? denn ich hab das Problem das mit z.B so eine methode wie selpow nicht einfällt...

Hat vielleicht noch jemand tipps wie man noch so effektiv Java lernen kann ?

Danke
 

DigitalForce

Mitglied
Etwas spät aber habe noch ne Lösung


Java:
public class Potenz {

    public static void main(String[] args) {
        potenz(5, 0, 4);
    }

    public static void potenz(int basis, int exponent, int max) {
        int ergebnis = basis;
        while (exponent <= max) {
            if (exponent == 0) {
                System.out.println(basis + " ^ " + exponent + " = 1");
            } else if (exponent == 1) {
                System.out.println(basis + " ^ " + exponent + " = " + basis);
            } else {
                System.out.println(basis + " ^ " + exponent + " = " + (ergebnis *= basis));
            }
            exponent++;
        }
    }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben