Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Rekursion » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 5 Beiträge
Grisu

Danke noch mal.

Ich fand Rekursionen eigentlich ganz nett, weil sich viele Folgen eins zu eins wie man sie in der Methematik beschreibt umsetzen lassen, jedenfalls wenn sie rekirsiv dargestellt sind.

Mein Problem war hier viel mehr, dass ich mir nicht klar darüber gewesen bin, dass ich die Variablen und Konstanten, die ich benötige in der Methode mit übernehmen muss, ist aber eigentlich ziemlich klar.
eulerscheZahl

Natürlich musst du alles entgegennehmen, wovon du den Inhalt nicht weiß und nicht (bzw. nicht ohne größeren Aufwand) berechnen kannst.
Ich denke, die Variable letztesB ließe sich noch rekonstruieren, jedoch ist die Übergabe der Variable deutlich einfacher.

Wenn du die Wahl zwischen einer iterativen und einer rekursiven Funktion hast, solltest du die iterative verwenden, da diese schneller ist (weil keine Daten kopiert und an die rekursive Funktion übergeben werden müssen).
Es gibt aber Funktionen die sich nicht oder nur mit großem Aufwand iterativ darstellen lassen.
Ein Beispiel, wo ich Rekursion für sinnvoll halte: ProjectEuler Problem 31
Grisu

Okay, das ist die andere Funktion (aus dem anderen Thread)

Hat mir aber dennoch sehr weiter geholfen.

Muss ich bei rekursiver Darstellung Grundsätzlich alle Variablen und Konstante die ich brauche entgegen nehmen?

Wenn sie sich verändern können doch eigentlich schon....

Danke, hat mir sehr geholfen.
eulerscheZahl

Gilt immer noch, dass die Funktion void sein soll?
Mein Vorschlag:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
public class Main {

	public static void ablRek(int[] a, int letztesB, int i){
		if(a.length == i) return;
		if (a[i] == 1)
			letztesB = (letztesB + 1) % 2;
		a[i] = letztesB;
		ablRek(a, letztesB, i + 1);
	}
	
	 public static void abl(int[] a){
		ablRek(a, a[0], 1);
	}
	
	public static void main(String[] args) {
		int[] a = {1, 1, 0, 1, 0, 0, 1, 1}; 
		System.out.print("a davor:   ");
		for(int j = 0; j < a.length; j++)
			System.out.print(a[j] + " ");
		abl(a);
		System.out.print("\na danach:  ");
		for(int j = 0; j < a.length; j++)
			System.out.print(a[j] + " ");
	}

	/*
	a davor:   1 1 0 1 0 0 1 1 
	a danach:  1 0 0 1 1 1 0 1 
	*/
}
Grisu Rekursion

ich würde gerne folgendes rekursiv schrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public static void array (int[] a){
                 int b=0;
                 for(int i=a.length-1;i>=0;i++){
                       if(i==0){
                                 b=a[0];
                       }
                       else if(a[i]==a[i-1]){
                                 b=0;
                      }
                      else{
                                b=1;
                       }



Die Rekursion muss ja über die Länge des Array stattfinden, das bedeutet ja, dass meine Abbruchbedingung ist a.length=1

Damit kann man ja schon mal beginnen:

if(a.length==1)

Jetzt muss ich in jedem Schritt ja einen Eintrag aus dem Array herausschneiden und das neue kürzere Array als Eingabe für die Methode wählen und dem herausgenommen Wert einen Wert b zuweisen. Und da hapert es an der Umsetzung.....