Kleines Problem mit der Rekursion

muff-in

Mitglied
Hallo,

Ich habe hier ein kleines Problem mit meiner Funktion Rekursion1. Es sollte eingentlich ganz einfach sein, warum funktioniert das denn nicht??

Java:
public class rekusion1 {
	public rekusion1(){
		rekursion0(3);}
	
	public int rekursion0(int x){
		if (x == 1){
			return 1;	
		} else if (x >= 1){
			return rekursion0((x-1)+2x-1);
		}
	}
}

Danke schonmal =)
 

Helgon

Bekanntes Mitglied
ka wo du das her hast, aber das die main methode fehlt fällt dir nicht auf?
edit:
und "wo ist der fehler" ist kein konkretes problem
 

muff-in

Mitglied
Es geht nicht um die main() Methode, ich weiß das sie fehlt, hab den Code ja gekürzt.
Das Problem entsteht, wenn die Funktion sich rekursiv aufruft, in der 2. if Schleife.
 

muff-in

Mitglied
Hat sich erledigt, war ein Mathematischer Fehler.

Edit: Nein, es hat sich doch nicht erledigt. :(
Komisch, wenn ich den Code so verändere

Java:
[...] return rekursion0(x-1+2*x-1);

gibt BlueJ beim complieren missing return statement raus,

und ansonsten, wenn man den Code so lässt wie er ist, also:

Java:
public class rekusion1 {
	
	public rekusion1(){
		rekursion0(3);}
	
	public int rekursion0(int x){
		
		if (x == 1){
			return 1;	
		} else if (x >= 1){
			rekursion0((x-1)+2x-1);
		}
	}
}

sagt er in Eclipse: Syntax Error on token "x", delete this token. + Linebreakpoint rekursion1: [line 12] - rekursion0(int)
 
Zuletzt bearbeitet:

muff-in

Mitglied
Weiß denn einer wie ich aus einer Methode, eine weitere Methode zürückgeben kann?
Also was ich anstelle dem unterstrichenen Wort eingeben müsste damit die Methode als Rückgabewert sich selbst besitzt?

Java:
public class rekusion1 {
	public rekusion1(){
		rekursion0(3);}
	
	public [U]int[/U] rekursion0(int x){
		if (x == 1){
			return 1;	
		} else if (x >= 1){
			[B]return rekursion0(x-1+2*x-1);[/B]
		}
	}
}
 

JCODA

Top Contributor
Dein Problem ist, dass du kein Wert für x <= 0 zurückgibst, deswegen muss noch ein weiterer else zweig rein (ohne Bedingung).
 
M

Marcinek

Gast
Wie meinst du das? Was willst du erreichen?

Das ginge via Reflection, aber ich glaube nicht, dass du das meinst ^^.
 

muff-in

Mitglied
Stimmt, so lässt sich die Klasse komplieren:

Java:
public class rekusion1 {

    public rekusion1() {
        rekursion0(3);
    }

    public int rekursion0(int x) {

        if (x == 1) {
            return 1;
        } else if (x >= 1) {
            return rekursion0((x - 1) + 2 * x - 1);
        } else {
            return rekursion0(x);
        }
    }
}

Aber es kommen sehr viele StackOverFlow Errors.
 

muff-in

Mitglied
Also meine Frage war, was ich anstelle dem int in der Methode rekursion0 eingeben müsste, damit sie funktioniert.
Das int vor dem Methodennamen ist ja der Rückgabewert, was die Methode zum Schluss rausgibt.
Wie müsste ich das int ersetzen, damit meine Rekursive Methode funktionert, also sozusagen den Befehl sich selbst wieder aufzurufen als Rückgabewert hat?
 
F

Firephoenix

Gast
Java:
public rekusion1() {
        rekursion0(3);
    }
Ist aber ziemlich sinnfrei, damit produzierst du einen int ohne irgendwas damit zu machen.

Die Stackoverflow kommen dadurch zustande, dass dein programm nie terminiert, es wird ein Aufruf auf den nächsten gepackt bis der Stack platzt.

Für x = 1 gibst du 1 aus, und für x >= 1 (warum eigentlich >= , erklär mir mal wie x an der stelle 1 sein kann?) rufst du die Funktion mit x = (x - 1) + 2 * x - 1 wieder auf mit den gleichen Regeln.
Für negative x packst du das x gerade wieder in die Funktion.

Also gilt:
für x = 1 ist deine Funktion 1
Für alle x <= 0 hast du eine schicke endlosschleife
und für alle x > 1 wird x immer größer, irgendwann läuft die variable über und du landest im endlosfall für negative werte (hier mal die ersten Aufrufe):
1. Aufruf, x = 3
2. Aufruf, x = 7
3. Aufruf, x = 19
4. Aufruf, x = 55
5. Aufruf, x = 163
6. Aufruf, x = 487
7. Aufruf, x = 1459
8. Aufruf, x = 4375
9. Aufruf, x = 13123
10. Aufruf, x = 39367
usw.

Vielleicht erklärst du einfach mal was du machen willst ;) das ist vielleicht einfacher.
Gruß
 

JCODA

Top Contributor
(x - 1) + 2 * x - 1 das ist das gleiche wie 3*x -2, sicher, dass die Formel richtig ist?

achja: 3*x-2 gibt bei x = 3, 3*3-2 = 7 aus, und die folge ist monoton steigend, also würde am ende sowas wie unendlich rauskommen, also fehlt dir eine sinnvolle Abbruchbedingung.
 

Fant

Bekanntes Mitglied
Verrate du doch zunächst mal, was du da überhaupt berechnen willst.

Das "int" ist nicht das Problem, sondern viel mehr die Tatsache, dass du da einfach Blödsinn berechnest.
Für x=1 gibst du sofort 1 zurück und in (vermutlich fast) allen anderen Fällen rutscht du in eine "Endlosschleife".
 

muff-in

Mitglied
Also, das was ich eigentlich machen wollte, war diese Aufgabe aus de Seite:
Java-Programmieraufgaben - Rekursion

[...]
Rekursive Funktion implementieren

Schwierigkeit 2

Gegeben sei folgende rekursiv definierte Funktion f:

f(n) := 1, für n = 1
f(n) := f(n-1) + 2n - 1, für n > 1
Implementieren Sie eine rekursive Java-Methode, die f(n) berechnet (ohne Iterationen).

Um welche Form von Rekursion handelt es sich?
[...]

Da ist auch die Lösung, aber ich wollte es selber ausprobieren, deswegen hab ich noch nicht nachgeschaut. :D -.-

Bis jetzt siehst so aus (mit ganz vielen StackOverFlowErrors), aber ich arbeite ja noch dran ;)

Java:
public class rekusion1 {

	public rekusion1() {
		rekursion0(3);
	}

	public int rekursion0(int x) {

		if (x == 1) {
			return 1;
		} else if (x > 1) {
			return rekursion0(x - 1) + 2 * x - 1;
		} else {
			return rekursion0(x);
		}
	}
}
 

muff-in

Mitglied
Hey, ich habs glaub ich.

Also in BlueJ klappt das. (In Eclipse noch nicht)

Java:
public class rekusion1 {

    public rekusion1(int x) {
        rekursion0(x);
    }

    public int rekursion0(int x) {

        if (x == 1) {
            return 1;
        } else if (x > 1) {
            return rekursion0(x - 1) + 2 * x - 1;
        } else {
            return rekursion0(x);
        }
    }
}

Edit: Naja es gibt wenigstens keine Fehlermeldungen.
 
Zuletzt bearbeitet:

Fant

Bekanntes Mitglied
Du hast da immer noch ne Endlosschleife für negative x-Werte drin. pack in den letzten else-Block einfach ein return -1 oder so rein. Abgesehen davon sollte deine Methode jetzt aber das berechnen, was sie berechnen soll.
 
F

Firephoenix

Gast
Hier wäre noch eine Möglichkeit mit Exception, für den nicht-definierten Bereich passt das denke ich etwas besser als sich die Funktion dafür "umzudefinieren"
Java:
public static int rekursion0(int x) {
    	if(x < 1){
    		throw new IllegalArgumentException("Funktion ist nur für x >= 1 definiert");
    	}
        if (x == 1) {
            return 1;
        } else{
            return rekursion0(x - 1) + 2 * x - 1;
        }
    }

Was die Funktion berechnet ist aber auch interessant (vorsicht, evtl Spoiler ^^)
f(x) = x*x = (x-1)*x+x = (x-1)*(x-1)+x+x-y = (x-1)*(x-1)+2 * x - 1 = f(x-1) + 2*x-1
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Methoden Kleines Problem mit meinem Glücksrad... Java Basics - Anfänger-Themen 9
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
J Vererbung Kleines Problem bei Vererbung! Java Basics - Anfänger-Themen 2
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
H Kleines Problem bei den Schleifen Java Basics - Anfänger-Themen 5
T kleines problem mit switch case Java Basics - Anfänger-Themen 11
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
R Login mit Datenbankabfrage: Kleines Problem! Java Basics - Anfänger-Themen 6
K Kleines Anfänger Problem bei der Abfrage Java Basics - Anfänger-Themen 8
X Kleines JMenuBar Problem Java Basics - Anfänger-Themen 8
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
P wahrscheinlich ein kleines Problem Java Basics - Anfänger-Themen 7
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
K kleines Array-Problem Java Basics - Anfänger-Themen 6
C Kleines 2D Spiel. Problem. Java Basics - Anfänger-Themen 5
U Kleines Problem mit Konstruktor^^ Java Basics - Anfänger-Themen 7
D kleines Eclipse-Problem ! Java Basics - Anfänger-Themen 2
O Kleines Problem mit Konstruktor mit Parametern aus generischer Klasse...oder so ;) Java Basics - Anfänger-Themen 2
M Kleines Problem mit Threads (synchronized) Java Basics - Anfänger-Themen 3
S Kleines Problem... NaN, Infinity? Java Basics - Anfänger-Themen 9
B Drag and Drop fähige Trackliste..nurnoch ein kleines Problem Java Basics - Anfänger-Themen 16
G Kleines Problem mit File Java Basics - Anfänger-Themen 7
G Kleines Problem mit Nimmspiel Java Basics - Anfänger-Themen 8
U kleines problem bei ner aufgabe :( Java Basics - Anfänger-Themen 8
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
G Kleines Problem Java Basics - Anfänger-Themen 3
S Ich habe ein kleines Problem mit meinem Übungsprogramm Java Basics - Anfänger-Themen 7
S Hab ein kleines Problem :) Java Basics - Anfänger-Themen 4
D noch ein kleines Problem Java Basics - Anfänger-Themen 4
M kleines generics problem Java Basics - Anfänger-Themen 15
B Kleines? Jedenfalls Problem mit Borland-Together! Java Basics - Anfänger-Themen 4
D Kleines Problem mit JDBC Java Basics - Anfänger-Themen 2
D Hab ein kleines Problem mit setScreenSize Java Basics - Anfänger-Themen 2
B kleines Problem Java Basics - Anfänger-Themen 3
G Kleines Problem Java Basics - Anfänger-Themen 5
A Kleines bzw. großes Problem ! Java Basics - Anfänger-Themen 2
Y kleines Problem Java Basics - Anfänger-Themen 9
J Kleines Problem mit Checkbox Java Basics - Anfänger-Themen 5
N Kleines Problem mit meiner ersten Klasse Java Basics - Anfänger-Themen 5
0 Kleines Problem mit ArrayList Java Basics - Anfänger-Themen 25
N kleines Problem mit meiner Schleife Java Basics - Anfänger-Themen 8
megachucky Kleines Problem mit dem "return" einer Methode. Java Basics - Anfänger-Themen 11
T moin leute hab ein kleines aber pikantes problem Java Basics - Anfänger-Themen 10
L nur kleines null Pointer Exception problem Java Basics - Anfänger-Themen 9
G kleines problem beim einlesen Java Basics - Anfänger-Themen 3
C Erstes kleines Problem - string in chat ? Java Basics - Anfänger-Themen 9
megachucky kleines problem mit einer nullpointer exception Java Basics - Anfänger-Themen 2
N Kleines Problem! Java Basics - Anfänger-Themen 7
megachucky kleines problem mit nem STACK Java Basics - Anfänger-Themen 8
P Kleines Problem Java Basics - Anfänger-Themen 2
G Kleines Problem Java Basics - Anfänger-Themen 7
S Kleines Java-Projekt; Kassenprogramm Java Basics - Anfänger-Themen 7
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
Koookie Kleines Frage - Antwort Programm (Anfänger) Java Basics - Anfänger-Themen 5
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
J Kleines Rechenprogramm Java Basics - Anfänger-Themen 13
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
B Input/Output Kleines Netzwerkproblem Java Basics - Anfänger-Themen 2
J OOP Kleines Schülerverwaltungsprogramm Java Basics - Anfänger-Themen 9
N ein kleines GUI mit einem hauch XML Java Basics - Anfänger-Themen 5
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
T erstes kleines Programm Java Basics - Anfänger-Themen 17
S Kleines Quiz Programm Java Basics - Anfänger-Themen 4
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
K Ein kleines Rätsel Java Basics - Anfänger-Themen 2
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
J kleines Karteikartenprogramm Java Basics - Anfänger-Themen 3
S Kleines Zeichen berechnen Java Basics - Anfänger-Themen 5
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
fLooojava Passwort generieren - kleines Programm Java Basics - Anfänger-Themen 15
H Kleines Prob Java Basics - Anfänger-Themen 5
J Flaechen vergleichen/kleines Fehler? Java Basics - Anfänger-Themen 23
K Kleines Projekt Java Basics - Anfänger-Themen 2
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
J Mal wieder ein kleines Toleranzproblem Java Basics - Anfänger-Themen 20
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
R Kleines Programm, benötige Hilfe! Java Basics - Anfänger-Themen 6
D Kleines Abfrageproblem Java Basics - Anfänger-Themen 3
K kleines Rekursionsproblem Java Basics - Anfänger-Themen 7
B Suche kleines Java-Applet Java Basics - Anfänger-Themen 6
P Kleines Problemm mit einer NullPointerException Java Basics - Anfänger-Themen 2
R kleines Kunstprogramm "mkbox" perfektionieren Java Basics - Anfänger-Themen 13
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
K Kleines Spiel / Daten speichern Java Basics - Anfänger-Themen 8
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
T Kleines Verständnissproblem mit Regex Java Basics - Anfänger-Themen 4
S Kleines Kartenspiel mit Java Java Basics - Anfänger-Themen 2
I Kleines Program, fehler? Java Basics - Anfänger-Themen 2
S kleines Würfelspiel Java Basics - Anfänger-Themen 10
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben