Potenz selber berechnen, Rekursiv.

hello_autumn

Mitglied
Hallo! Ich habe ein blödes Problem Ich soll eine Aufgabe machen, wo ich meine Potenz berechne und das Rekursiv. Okay, alles schön und gut. Ich verstehe die Rekursion nicht.

Ich weiß nur:
1. Main wird aufgerufen, da drinne ist die Rekursion, diese zeigt dann auf meine power.
2. Power berechnet meine Potenz, schickt die wieder zurück zur Main.
3. Main zeigt die an.

Aber ich kapier das mit dem Klammern nicht ganz... Also in der Main-Methode.

Wir haben keinen Beispielcode bekommen, oder einen Tipp. Ich habe folgendes selber geschrieben:

Java:
import java.util.Scanner;


public class Power {

	public static int power(int x, int n, scan) {
		// Mein Exponent zuerst (x), dann die Basis (n)!!
		
		x = scan.nextInt();
		n = scan.nextInt();
	
			if (x==0) 
				return 1;
			// Falls Exponent 0, dann die 1.
			
			int a;
			
			else 
				
				for (i=0, i<x, i++) {
				??
				}
				return 
	
	
	}

	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
		System.out.println(power(x,n));
	
	}

}

Ich weiß nicht, ob das richtig ist. Meine nächste Frage wäre, darf ich nach einer if-Abfrage, mal einfach im else-Zweig eine for-Schleife reinwerfen?? Da ich meine Potenz, ja Basis mal x. Also x ist meine Potenz...

Hach, ich bin schon durcheinander... Mag mir jemand helfen? 🙁
 
Zuletzt bearbeitet:
Rekursion bedeutet, dass du keine Schleifen benutzten sollst, sondern die gleiche Methode mit anderen Parametern aufrufen sollst.
Tipp: falls mehr als eine Anweisung zu einem If gehören, sollten diese Anweisungen per geschweifte Klammern zusammengefasst werden. (Da sonst Java nur die erste Anweisung zum If dazuzählt. )

Bei Potenzen gibts ja zwei Fälle, entweder der
Exponent ist 0 => Ergebnis ist 1
oder
Exponent ist größer als 0, dann : x^n = x* x^(n-1)

Versuche das in deine Rekursionsmethode reinzubringen.

Die Zahlen x und n sollten nicht in der Rekursionsmethode, sonder schon vorher abgefragt werden, da die Rekursionsmethode häufiger aufgerufen werden soll.
 
Zuletzt bearbeitet:
Okay, also die Klammer sind gesetzt und die x,n aus der Main-Methode raus. (Ich hoffe du meintest das 🙂 )

Folgendes habe ich erdacht:

Java:
import java.util.Scanner;


public class Power {

	public static int power(int x, int n, scan) {
		// Mein Exponent zuerst (x), dann die Basis (n)!!
		
		x = scan.nextInt();
		n = scan.nextInt();
	
			if (x==0) {
				return 1;
			// Falls Exponent 0, dann die 1.
			}
			int a;
			else {
				a = n*power(x-1);
				return a;
			}
	
	}

	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
		System.out.println(power(a)));
	
	}

}

Ich soll ja die Potenz wieder mit der Rekursion berechnen. Es dämmert mir da etwas mit den Hanoitürmen... deswegen das n*power(x-1).

Darf man das so? Ist das in die richtige Richtung gedacht? ???:L


Klar... Rekursion, man will ja Schleifen gerade vermeiden und ich werfe da welche rein... xD
 
Zuletzt bearbeitet:
Also, teilweise besser, aber compilen tut das ja immernoch nicht, mach folgendes:

x = scan.nextInt();
n = scan.nextInt();

in die main methode und an die methode werden die beiden werte x und n übergeben.

entferne ",scan" in public static int power(int x, int n, scan) {

entferne "int a;" (in der mitte der if-Abfrage ... zu welchem teil soll den dies variable gehören ... wenn dann vielleicht nach dem else ... aber du kannst auch einfach return n* power(x,n-1) schreiben...)

die meisten Matheleute verwenden das x als "Basis" und das n als Exponent ... deswegen ist das sehr verwirrend wenn du die Buchstaben hier vertauschst.
 
Okay. Sieht schon schöner aus 🙂

Ehm, zu dem int a. Ich muss doch irgendetwas zurückgeben zum Anzeigen? Also meinen Wert, dann in eine Variable packen, um der Main-Methode zu zeigen, was es überhaupt greifen soll. Ist das richtig so?

Habs jetzt so gemacht:

Java:
import java.util.Scanner;


public class Power {

	public static int power(int x, int n) {
		// Mein Exponent zuerst (x), dann die Basis (n)!!
	
			int a;
	
			if (x==0) {
				return 1;
			// Falls Exponent 0, dann die 1.
			}
			else {
				return a= n*power(n,x-1);
			}
	
	}

	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
		
		int x = scan.nextInt();
		int n = scan.nextInt();
		
		System.out.println(power(a));
	
	}

}

Du hast aber geschrieben, a brauche ich nicht. Jetzt denke ich, die Main-Methode kriegt das von geisterhand zu sich.

Ja, leider ist das so in der Aufgabe. Ich soll als erstes das x eingeben, welches meine Potenz ist. n Basis, als zweite.
 
Okay, also ich würde es so machen:

Java:
import java.util.Scanner;
 
 
public class Power {
 
	public static int power(int x, int n) {
		// Mein Exponent zuerst (x), dann die Basis (n)!!
			if (x==0) { // Falls Exp. 0 => Ergebnis = 1
				return 1;			
			}else {
				return n*power(x-1,n);
			}
 
	}
 
	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
 
		int x = scan.nextInt();
		int n = scan.nextInt();
 
		System.out.println(power(x,n));
                scan.close();
	}
 
}

Edit:

Die Dinge der der Klammer nach Methoden sind Übergabeparameter, bei public static int power(int x, int n) { gibt "int" an, dass int der Rückgabe wert ist, und der methodenaufruf selbst also power(x,n) gibt den wert zurück, der die Methode nach return stehen hat.
 
Zuletzt bearbeitet:
Ahhh, ich freue mich 😀

Ich hab jetzt weiter experimentiert. Hab folgendes gehabt:

Java:
import java.util.Scanner;


public class Power {

	public static int power(int x, int n) {
		// Mein Exponent zuerst (x), dann die Basis (n)!!
	
			int a;
	
			if (x==0) {
				return 1;
			// Falls Exponent 0, dann die 1.
			}
			else {
				return a= n*power(n,x-1);
			}
	
	}

	public static void main(String args[]) {
		Scanner scan = new Scanner(System.in);
		
		int x = scan.nextInt();
		int n = scan.nextInt();
		
		System.out.println(power(x,n));
	
	}

}

Kommt aber bei 0, eine 1. Bei anderen Zahlen eine 0.

Ich hab aber die Power(x-1,n) falsch 😀

Danke! Du hast mir geholfen doch auf die Sprünge 😀 Ich hab zu schnell dir geschrieben 🙂

Ich freu mich grad. Ich glaube ich verstehe diese Rekursion 😀

Nochmals Danke! :toll:

Mache direkt eine weitere Aufgabe 🙂 :applaus:
 

Zurück
Oben