# Potenzfunktion



## Nooblearning (3. Dez 2009)

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


----------



## icarus2 (3. Dez 2009)

Du findest eine statische Method ein der Klasse Math

Schau dir da mal Math.pow(double a, double b) an.


----------



## Sempah (3. Dez 2009)

```
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?


----------



## Nooblearning (3. Dez 2009)

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


----------



## Nooblearning (3. Dez 2009)

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


----------



## faetzminator (3. Dez 2009)

4 Threads hinter deinem... http://www.java-forum.org/hausaufgaben/92413-potenz-rekursion-ohne-multiplikation.html


----------



## Sempah (3. Dez 2009)

Darfst du dir diese selbst schreiben?


```
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 (3. Dez 2009)

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 (3. Dez 2009)

```
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;
		}
}
```


----------



## icarus2 (3. Dez 2009)

Wiso complex? Hat doch nix mit Komplexen Zahlen zu tun?


----------



## Nooblearning (3. Dez 2009)

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


----------



## partsch (3. Dez 2009)

icarus2 hat gesagt.:


> Wiso complex? Hat doch nix mit Komplexen Zahlen zu tun?


natürlich nicht^^
mir ist grad kein besserer Name eingefallen


----------



## Sempah (4. Dez 2009)

> @Sempah das macht doch kein Unterschied wenn ich die Selfpow methode über der main methode schreibe oder ?



Natürlich nicht


----------



## DigitalForce (5. Dez 2009)

Etwas spät aber habe noch ne Lösung



```
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++;
        }
    }
}
```


----------

