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?
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:
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
URL: Online Java Compiler - Online Java Editor - Java Code Online - Online Java Runner
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 ?