Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.)

Esto88

Mitglied
hallo,
im Zuge meiner Klausurvorbereitungen habe ich noch ein paar Fragen ... bei denen ihr mir vll. weiterhelfen könnt :)

Rekursion:
Ich habe folgende rekursive Methode und soll folgendes dazu beantworten:
Welchen Wert liefert der Aufruf f(6,4)? In welcher Reihenfolge und mit welchen Parametern wird f dabei rekursiv aufgerufen? Wie groß ist die maximale Rekursivtiefe, d.h. die maximale Anzahl gleichzeitig aktivieter Aufrufe?

Java:
static int f(int x, int y) {
  if (x < 2)
    return 1;
  else if (y<= 2)
   return 2;
  else
   return 2 * f(x-2, y/2) + f(x-1,y+1);
}

Frage A: Nun eigentlich dachte ich, ich versteh das ganze, aber anscheinend ist dem nicht so. Denn ist soll 13 Aufrufe geben und 19 herauskommen. (was auch tatsächlich rauskommt, wenn ichs durch Eclipse jage ...)

Ich frage mich was ich da falsch mache, denn ich hab bedeutend mehr aufrufe und bekomme 33 raus. Für meinen Denkansatz siehe Anhang.

Frage B: Oft gibt es bei solchen Aufgaben auch die Frage "Temeniert für alle x>= 0, y >= 0 der Aufruf f(x,y) mit der Rückgabe eines int-Wertes? Begründen Sie Ihre Antwort."

Wie gehe ich denn an so eine Frage am Besten ran? Gibt es ein Theorem/Faustregel oder sowas, das ich anwenden könnte?


Schleife:
Die Frage ist ob folgende Schleife terminiert und was rauskommt:
Java:
int x = 1;
int y = 2;
do {
  x = x + y;
  switch (x%3) {
   case 0: y = x + 1;
   case 1: y = x + 2; break;
   case 2: y = x + 3; break;
   default: y = x - 1; break;
  }
}while (y < 20);

Wenn ich das durch Eclipse jage, bekomm ich x = 19, y= 21 ... wenn ichs selbst ausrechne bekomme ich x = 34, y = 36 ... was passiert denn nachdem es das erste mal case 0 eintritt? Also

Code:
x = 1, y = 2
x = 3, y = 2 // vor der Schleife
x = 3, y = 4 // case 0
// und nu? laut eclipse müsste case 1 kommen, aber warum  das denn ?
URL: Online Java Compiler - Online Java Editor - Java Code Online - Online Java Runner
 

Anhänge

  • it1 Kopie.jpg
    it1 Kopie.jpg
    49 KB · Aufrufe: 38

stg

Top Contributor
Zunächst schon mal zu (A):
Dein Vorgehen ist richtig, du hast nur direkt zu Beginn einen Fehler im linken Teilbaum. f(4,2) gibt 2 zurück. Damit lautet das Ergebnis schließlich:
2 * 2 + 15 = 19

Eine allgemeingültige Regel zu Problem vom Typ (B) wird es kaum geben. Da hilft nur viele ähnliche Aufgaben durchzugehen, um "ein Gespür dafür zu entwickeln".

Code:
x = 1, y = 2
x = 3, y = 2 // vor der Schleife
x = 3, y = 4 // case 0
// und nu? laut eclipse müsste case 1 kommen, aber warum  das denn ?

3+4 ist 7, 7 mod 3 ist 1 ...
 
Zuletzt bearbeitet:

CSHW89

Bekanntes Mitglied
Wenn ich das durch Eclipse jage, bekomm ich x = 19, y= 21 ... wenn ichs selbst ausrechne bekomme ich x = 34, y = 36 ... was passiert denn nachdem es das erste mal case 0 eintritt? Also

Code:
x = 1, y = 2
x = 3, y = 2 // vor der Schleife
x = 3, y = 4 // case 0
// und nu? laut eclipse müsste case 1 kommen, aber warum  das denn ?
URL: Online Java Compiler - Online Java Editor - Java Code Online - Online Java Runner
Switch-Case hat in Java (bzw. auch in C, C++, ect...) die "Eigenart", dass wenn ein Case korrekt ist, er alle weiteren Anweisungen dahinter ausführt, also auch die, in den anderen Cases. Dies kann man nur durch ein Break am Ende eines Case verhindern. Im Case 0 fehlt das Break, wodurch die beiden Anweisungen y=x+1 und y=x+2 immer beide ausgeführt werden, wenn Case 0 eintritt.

lg Kevin
 

Esto88

Mitglied
alles klar, danke soweit :)

Nochmal drei kleine Fragen:
1) Wenn ich eine Dezimalzahl in eine Oktazahl umwandeln will, teil ich durch 8, also bspw.:

123[SUB](Dez)[/SUB] = 173[SUB](Okt)[/SUB]

123 : 8 = 15 Rest 3
15: 8 = 1 Rest 7
1: 8 = 0 Rest 1

richtig? Wie sieht das denn aus wenn ich eine negative Dezimalzahl habe, also z.B. -123 ?


2) Wann genau wird bei einer for-Schleife das update ausgeführt? Nach oder vor dem Klammern-Block?
Also Wenn ich z.B.
Java:
for (int i = 1; i <= 6; i + 8) { Anweisung A; }
habe. Wird dann Anweisung A ein oder zweimal ausgeführt?



Update: 3) Folgender Code:
Java:
                int a = 4;
		int b = 2;
		do {
			a = a+b;
			System.out.println("a vor:"+b);
			if ((a%3) ==0); System.out.println("continue"); continue;
			b = b+1;
			System.out.println("b:"+b);
		} while((a%5) != 0);
Laut meiner Muster-Lösung terminiert der Code mit a = 15, b = 4.
Eclipse sagt aber:
Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Unreachable code

	at trest.test6.main(test6.java:23)

Warum ist das so? Außerdem wenn die while-Bedingung von vorne herein nicht stimmt, also in dem fall a%5 = 0 wäre; würde sie trotzdem 1 mal durchlaufen und dann erst im zweiten Anlauf stoppen?
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
[...]
Rekursion:
[...]
Frage B: Oft gibt es bei solchen Aufgaben auch die Frage "Temeniert für alle x>= 0, y >= 0 der Aufruf f(x,y) mit der Rückgabe eines int-Wertes? Begründen Sie Ihre Antwort."

Wie gehe ich denn an so eine Frage am Besten ran? Gibt es ein Theorem/Faustregel oder sowas, das ich anwenden könnte?

Zuerst mal, du meinst wohl "Terminiert", nicht "Temeniert".

Theorem/Faustregel:
Ein rekursiver Ablauf terminiert auf jeden Fall, wenn das zu lösende Problem mit jedem Unteraufruf "kleiner"/"einfacher" wird.

In deinem "Rekursion"-Beispiel wird bei jedem Unteraufruf immer x kleiner gemacht - irgendwann muss die Rekursionstiefe dann mit dem "if( x < 2 ) return 1;" -Abschnitt abbrechen (sofern nicht irgendeine andere Bedingung schon vorher den "Ast" beendet).

Theorem: D.h. die "Problemgröße" muss monoton fallend sein - es muss nicht "steng monoton" sein, sofern sichergestellt ist, dass kein Rekursions-"Ast" sich in "gleichbleibender Problemgröße" verfangen kann.
 

arilou

Bekanntes Mitglied
zu 1): im Zweifelsfall - wandle die entsprechende positive Zahl, und setz' vor die Oktalzahl dann '-'...

zu 2): In deiner for-Schleife muss es wohl "i += 8" lauten, da fehlt ein '='; der Schleifenkörper wird 1* ausgeführt wobei i=1; dann wird i auf 9 hochgezählt, was nicht mehr der Durchlaufbedingung entspricht, womit die Schleife dann abbricht.

zu 3): Auch hier ein offensichtlicher Programmierfehler:
Java:
if ((a%3) ==0) { System.out.println("continue"); continue; }
Schon der ';' beendet den if - er muss weg. Zusätzlich hast du die '{' und '}' um den .println() und den continue; vergessen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4
S klassen in verschiedene Dateien Java Basics - Anfänger-Themen 5
3 Verschiedene Fragen (bin neu hier) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben