Rekursion Basic

B

BlueLizard

Gast
Hallo Leute,

ich habe glaube ich eine Verständnis Frage was das Thema Rekursion angeht.

Ich habe den Pseudocode gegeben:

Code:
if y = 0 then x
    else          f(x-1, y-1)
fi

Nun habe ich also (meiner Meinung nach genau das umgesetzt was mir der Pseudocode sagt:


Java:
public static int rec(int x, int y) {
     if (y == 0) return x;
     else {
           System.out.println(y);
           return rec(x-1, y - 1);
     }

Nun mein Problem: Der Algorithmus determiniert nicht für y < 0, obwohl der Pseudocode das verlangt.

Da es eine der ersten Aufgaben dazu ist, wäre ich froh wenn mir jemand nur meinen Denkfehler erklärt, ohne Lösung oder fertigen Code.

Ich danke euch schon mal für die Mühe.
 

insanezulu

Mitglied
Hallo,
wenn y < 0 gilt, dann kann auch der Pseudocode nicht terminieren, weil y dann immer negativ und nie gleich null ist...
Mit anderen Worten, du hast den Pseudocode genau richtig umgesetzt.

Aber du könntest noch eine Ausgabe für x reinballern.
 
B

BlueLizard

Gast
Hallo,
wenn y < 0 gilt, dann kann auch der Pseudocode nicht terminieren, weil y dann immer negativ und nie gleich null ist...
Mit anderen Worten, du hast den Pseudocode genau richtig umgesetzt.

Aber du könntest noch eine Ausgabe für x reinballern.

Genau das ist ja das Problem, ich verstehe es nicht.
Mein Lehrer möchte, dass wenn man ein y < 0 eingibt, das eine Addition gemacht wird, aber ich sehe das in diesem Pseudocode einfach nicht.

Konkret heißt das wenn man x = 454, y = -88 eingibt dann soll 542 raus kommen...
 

mrBrown

Super-Moderator
Mitarbeiter
Ich bin mir ziemlich sicher, dass da nirgends ein x+y in irgendeiner Form stehen soll, sondern das ebenso rekursiv gelöst werden soll.
Daher: hast du denn verstanden, was die Funktion für positive Zahlen ausrechnet? Ein Einzelnes Wort reicht als Erklärung :)

(Da ich nur bedingt Hellsehen kann ist das natürlich etwas Spekulation, die vollständige Aufgabenstellung würde da vielleicht etwas Licht ins Dunkle bringen.)
 
B

BlueLizard

Gast
Ich bin mir ziemlich sicher, dass da nirgends ein x+y in irgendeiner Form stehen soll, sondern das ebenso rekursiv gelöst werden soll.
Daher: hast du denn verstanden, was die Funktion für positive Zahlen ausrechnet? Ein Einzelnes Wort reicht als Erklärung :)

(Da ich nur bedingt Hellsehen kann ist das natürlich etwas Spekulation, die vollständige Aufgabenstellung würde da vielleicht etwas Licht ins Dunkle bringen.)

Da bin ich mir nicht sicher, Meiner Meinung nach soll die Differenz der beiden Zahlen berechnet werden. oder? :D


Die Aufgabenstellung heißt konkret:
Überlegen Sie, wie der Algorithmus zu erweitern ist, damit er für alle ganzzahligen Werte terminiert.
Schreiben Sie dafür eine Java-Methode

Das heißt für mich das bei einem negativen y statt einer dekrementierung eine inkrementierung erfolgen soll?
 
K

kneitzel

Gast
Also bei dem Pseudocode ist kein Datentyp angegeben, daher ist da eigentlich nicht mit einem Overflow zu rechnen. Aber wenn man den umsetzt, dann hat man natürlich die Limitation eines Datentypen und damit einen Overflow.
Leider ist auch der Stack begrenzt, so dass wird bei der Rekursion in ein Problem laufen.

Aber wenn man einen kleinen Datentypen wählt, dann ist das natürlich plötzlich auch lauffähig. Also eine Version mit byte statt int kann man direkt laufen lassen:
Java:
package de.javaforum;

public class Recursion {
    public static void main(String[] args) {
        System.out.println(f((byte)10, (byte)-10));
    }

    public static short f(byte x, byte y) {
        if (y == 0) return x;
        return f((byte) (x - 1), (byte) (y - 1));
    }
}

Aber wie gesagt: Bei dem Pseudocode würde ich erst einmal x und y als Ganzzahlen sehen und die haben keine Begrenzung und damit kein Overflow.
 
B

BlueLizard

Gast
Ich hab jetzt eine Funktion Rec die das tut:

Java:
    public static int rec(int x, int y) {

        if (y <= 0) {
            if (y == 0) return x;
            else return rec(x + 1, y + 1);
        }
        if (y >= 0) {
            if (y == 0) return x;
            else return rec(x-1,y -1);
        }
        return 0;
    }

jetzt habe ich mal versucht das selbe iterativ zu formulieren:

Code:
      public static int iter(int x, int y) {
        return x-y;
    }

Ist das jetzt das gleiche? o_O Was genau soll mir die Aufgabe jetzt sagen?
 

mrBrown

Super-Moderator
Mitarbeiter
jetzt habe ich mal versucht das selbe iterativ zu formulieren:

Code:
      public static int iter(int x, int y) {
        return x-y;
    }

Ist das jetzt das gleiche? o_O Was genau soll mir die Aufgabe jetzt sagen?
Für die iterative Variante müsstest du schon irgendeine Schleife (in die Richtung von while (y>0) ...) einbauen :)

Was dir die Aufgabe sagen soll, hängt von der Aufgabe ab, die hier niemand kennt ;P
Übersetzen von Pseudocode, erkennen was der Code überhaupt macht, anpassen an andere Fälle, überführen von Rekursion in Iteration, ...
 

lennero

Bekanntes Mitglied
Ich hab jetzt eine Funktion Rec die das tut:

Java:
    public static int rec(int x, int y) {

        if (y <= 0) {
            if (y == 0) return x;
            else return rec(x + 1, y + 1);
        }
        if (y >= 0) {
            if (y == 0) return x;
            else return rec(x-1,y -1);
        }
        return 0;
    }

jetzt habe ich mal versucht das selbe iterativ zu formulieren:

Code:
      public static int iter(int x, int y) {
        return x-y;
    }

Ist das jetzt das gleiche? o_O Was genau soll mir die Aufgabe jetzt sagen?

Beide Methoden machen das Gleiche. Ruf die erste Methode mit y = Integer.MAX_VALUE auf dann siehst du was dir die Aufgabe sagen soll.
 

mrBrown

Super-Moderator
Mitarbeiter
Beide Methoden machen das Gleiche. Ruf die erste Methode mit y = Integer.MAX_VALUE auf dann siehst du was dir die Aufgabe sagen soll.

Java:
public class Test {
  public static void main(String[] args) {
      System.out.println(rec(42, Integer.MAX_VALUE));
  }

  public static int rec(int x, int y) {
      if (y <= 0) {
          if (y == 0) return x;
          else return rec(x + 1, y + 1);
      }
      if (y >= 0) {
          if (y == 0) return x;
          else return rec(x-1,y -1);
      }
      return 0;
  }

}

Code:
$ javac Test.java
$ java Test
-2147483605

:p
 

lennero

Bekanntes Mitglied
Java:
public class Test {
  public static void main(String[] args) {
      System.out.println(rec(42, Integer.MAX_VALUE));
  }

  public static int rec(int x, int y) {
      if (y <= 0) {
          if (y == 0) return x;
          else return rec(x + 1, y + 1);
      }
      if (y >= 0) {
          if (y == 0) return x;
          else return rec(x-1,y -1);
      }
      return 0;
  }

}

Code:
$ javac Test.java
$ java Test
-2147483605

:p

Bekomme schon mit sehr viel kleineren y-Werten stackoverflow exceptions. Liegts am Betriebssystem?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
M Variablen Rekursion mit 2 Parameteren Java Basics - Anfänger-Themen 4
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
M Lösungsweg Rekursion Java Basics - Anfänger-Themen 1
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
D Rekursion - Ich raffs nicht Java Basics - Anfänger-Themen 16
N Methoden Rekursion mit Kreisen Java Basics - Anfänger-Themen 7
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
J Rekursion Java Basics - Anfänger-Themen 22
T Rekursion Programmierverständnis Java Basics - Anfänger-Themen 12
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
K Rekursion einer Zahlenfolge (Ab- und Aufzählung) Java Basics - Anfänger-Themen 6
Zeppi Rekursion Java Basics - Anfänger-Themen 15
V Backtracking und Rekursion Java Basics - Anfänger-Themen 15
L REKURSION Java Basics - Anfänger-Themen 13
Kirby.exe Rekursion Java Basics - Anfänger-Themen 7
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
X Rekursion Java Basics - Anfänger-Themen 3
H Rekursion Java Basics - Anfänger-Themen 2
D Erste Schritte Rekursion Java Basics - Anfänger-Themen 13
M Rekursion Tage Ansteckung gesamte Bevölkerung Java Basics - Anfänger-Themen 15
M Java Rekursion Java Basics - Anfänger-Themen 9
G Java Rekursion Java Basics - Anfänger-Themen 5
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
N Rekursion Java Basics - Anfänger-Themen 18
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
X Rekursion Rätsel Java Basics - Anfänger-Themen 4
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
W Rekursion Java Basics - Anfänger-Themen 0
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
N Rekursion Java Basics - Anfänger-Themen 1
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
G Rekursion Java Basics - Anfänger-Themen 20
M Rekursion Java Basics - Anfänger-Themen 7
F Hilfe bei Rekursion... Java Basics - Anfänger-Themen 4
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
B Rekursion Wurzel Java Basics - Anfänger-Themen 39
O Rekursion ordentlich aufschreiben Java Basics - Anfänger-Themen 2
B Rekursion verstehen Java Basics - Anfänger-Themen 4
O Rekursion Java Basics - Anfänger-Themen 2
E Rekursion verstehen. Java Basics - Anfänger-Themen 4
E Rekursion Kisten befüllen Java Basics - Anfänger-Themen 10
E Rekursion verstehen Java Basics - Anfänger-Themen 2
O Rekursion, String Java Basics - Anfänger-Themen 8
N Invertierte Rekursion??? Java Basics - Anfänger-Themen 5
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
L Rekursion im Baum Java Basics - Anfänger-Themen 9
E Pfade eines Baums angeben ohne Rekursion Java Basics - Anfänger-Themen 20
L Rekursion Baumknoten Java Basics - Anfänger-Themen 8
L Rekursion größtes Zeichen Java Basics - Anfänger-Themen 8
L Rekursion Modulo Java Basics - Anfänger-Themen 7
I Rekursion Java Basics - Anfänger-Themen 11
H Rekursion Java Basics - Anfänger-Themen 7
N Methoden zur Rekursion (catalansche Zahlen) Java Basics - Anfänger-Themen 4
S Frage zu Rekursion... Java Basics - Anfänger-Themen 15
N Java catalansche Zahlen (Rekursion) Java Basics - Anfänger-Themen 5
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
S Frage zu einer Rekursion Java Basics - Anfänger-Themen 15
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Rekursion Java Basics - Anfänger-Themen 5
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
N Rekursion Java Basics - Anfänger-Themen 2
B Rekursion - Übung Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
P Rekursion Java Basics - Anfänger-Themen 19
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
M Rekursion schreiben Java Basics - Anfänger-Themen 16
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T Array Rekursion Java Basics - Anfänger-Themen 1
B lineare und schlichte Rekursion Java Basics - Anfänger-Themen 1
A Rekursion Java Basics - Anfänger-Themen 2
B Rekursion Java Basics - Anfänger-Themen 3
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
A Lineare Rekursion Java Basics - Anfänger-Themen 6
P Hilfe zur Rekursion? Java Basics - Anfänger-Themen 2
B Rekursion Schneeflocke - Kurze Frage zur Methode Java Basics - Anfänger-Themen 11
L Rekursion Java Basics - Anfänger-Themen 4
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
kilopack15 Rekursion und Schleifen Java Basics - Anfänger-Themen 27
E Rekursion Java Basics - Anfänger-Themen 10
G rekursion nicht verstanden Java Basics - Anfänger-Themen 5
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
E Methoden String wird in Rekursion nicht überschrieben Java Basics - Anfänger-Themen 2
T 2fach Rekursion. Java Basics - Anfänger-Themen 4
N Rekursion mit if-Anweisung Java Basics - Anfänger-Themen 10
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
P Methoden Primzahltest mit Rekursion Java Basics - Anfänger-Themen 3
C Rekursion überführen in eine normale methode Java Basics - Anfänger-Themen 1
M Methoden Rekursion nachvollziehen Java Basics - Anfänger-Themen 4
C Rekursion Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben