Hallo zusammen!
Ich bin neu in diesem Forum und absoluter Java-Anfänger.
Ich studiere im 3. Semester Communication and Multimediadesign und da gehört auch ein Semester Computertechnik zu, in dem wir grob in die Informatik eingewiesen werden. Natürlich lässt sich Programmierung da nicht vermeiden.
Ich möchte hier jetzt zwei Aufgaben vorstellen, eine davon konnte ich lösen, bei der anderen habe ich Schwierigkeiten.
Vielleicht sollte ich noch dazu sagen, das ich Computertechnik eigentlich im ersten Semester hatte und dort C# beigebracht bekam, da ich durch die Prüfung gefallen bin es jetzt wiederholt habe und uns eigentlich Java beigebracht werden sollte, allerdings konnte der Prof das selbst nicht so, er kennt sich auch besser in C aus -.-. Deshalb habe ich bei Java leider nicht so den Durchblick.
Ich fang einfach mal an:
1. Aufgabe:
Was berechnet folgende Funktion? Erstellen Sie eine Tabelle in der Sie für die Zahlen von n=0 bis 10 das jeweilige Ergebnis und die Anzahl der Aufrufe der Funktion eintragen.
[JAVA=42]int A(int n)
{
if(n < 2)
return n;
else
return A(n - 1) + A(n - 2);
}[/code]
Mit dieser Aufgabe hatte ich eigentlich keine Probleme. ich fange an und setze in
n=0. Dann steht in der nächsten Zeile
und somit gebe ich die Null aus. Für n=1 funktioniert das dann auch noch. Dann setze ich n=2 und springe zum ersten Mal in die Zeile
. Setze ich n=2 dort an erhalte ich den Wert 1 für die erste Klammer und den Wert 0 für die zweite Klammer und komme mit der Addition auf den Wert 1, den ich wiederrum ausgebe. Somit haben wir schon "0,1,1" ausgegeben.
Bei n=3 habe ich mich zum ersten Mal verhaspelt, weil ich direkt die Endergebnisse der Klammern (2, 1) addiert habe, ohne sie oben wieder aufzurufen. Das sollte natürlich nicht passieren, aber irgendwann habe ich es rausgefunden und für n=3 die Ausgabe 2 erhalten.
Damit zeichnete sich dann so langsam ab, das diese Rekursion die Fibonacci-Folge ausgibt.
Schwierig ist im Nachhinein hierbei nur, die Aufrufe zu zählen und aufzuschreiben. Außer zählen habe ich da noch keine bessere Lösung für gefunden.
Nun die 2. Aufgabe, die mir Schwierigkeiten bereitet:
Was berechnet folgendes Programm? Erstellen Sie eine Variablentabelle, in der Sie die Werte der Variablen für jeden Rekursionsdurchlauf eintrage.
[JAVA=42]public static void main(String args[]) {
int x = f1(10);
}
public static int f1(int i) {
if (i==0) {
return i;
}
int x = i+f1(--i);
return x;
}[/code]
Die Aufgabenstellung ist dieselbe wie oben, nur das ich hier die Aufrufe nicht zählen brauche.
Trotzdem schaffe ich es nicht, sie zu lösen.
Mein Problem sind hier zwei unbekannte Variablen, nämlich x und i (und nicht wie oben nur n).
Ich fange damit an und setze i=0.
Somit bliebe die erste Zeile
noch unberührt.
Mit dem nächsten Aufruf würde ich dann 0 ausgeben.
Nun setze ich i=1.
Damit rutsche ich in die nächste Zeile
und bekäme 1+10 (-1). Damit wären wir bei 10 und würden 10 ausgeben.
Das macht aber keinen Sinn, weil für jedes weitere i die Lösung trotzdem 10 wäre...
Ich vermute, das ich mich hier ziemlich blöd anstelle und wenn man es mir einmal erklärt ich es dann auch lösen kann. Aber solange der Groschen nicht fällt und ich weiß, wie man so ein Programm liest, um es zu lösen, nützt mir das in der Klausur nur wenig.
Aber ich hoffe, das mir hier jemand auf die Sprünge helfen kann und mir zeigt, was ich falsch mache
LG
Biene88
Ich bin neu in diesem Forum und absoluter Java-Anfänger.
Ich studiere im 3. Semester Communication and Multimediadesign und da gehört auch ein Semester Computertechnik zu, in dem wir grob in die Informatik eingewiesen werden. Natürlich lässt sich Programmierung da nicht vermeiden.
Ich möchte hier jetzt zwei Aufgaben vorstellen, eine davon konnte ich lösen, bei der anderen habe ich Schwierigkeiten.
Vielleicht sollte ich noch dazu sagen, das ich Computertechnik eigentlich im ersten Semester hatte und dort C# beigebracht bekam, da ich durch die Prüfung gefallen bin es jetzt wiederholt habe und uns eigentlich Java beigebracht werden sollte, allerdings konnte der Prof das selbst nicht so, er kennt sich auch besser in C aus -.-. Deshalb habe ich bei Java leider nicht so den Durchblick.
Ich fang einfach mal an:
1. Aufgabe:
Was berechnet folgende Funktion? Erstellen Sie eine Tabelle in der Sie für die Zahlen von n=0 bis 10 das jeweilige Ergebnis und die Anzahl der Aufrufe der Funktion eintragen.
[JAVA=42]int A(int n)
{
if(n < 2)
return n;
else
return A(n - 1) + A(n - 2);
}[/code]
Mit dieser Aufgabe hatte ich eigentlich keine Probleme. ich fange an und setze in
Code:
int A(int n)einfügen
Code:
if(0 < 2)
Code:
return A(n - 1) + A(n - 2)
Bei n=3 habe ich mich zum ersten Mal verhaspelt, weil ich direkt die Endergebnisse der Klammern (2, 1) addiert habe, ohne sie oben wieder aufzurufen. Das sollte natürlich nicht passieren, aber irgendwann habe ich es rausgefunden und für n=3 die Ausgabe 2 erhalten.
Damit zeichnete sich dann so langsam ab, das diese Rekursion die Fibonacci-Folge ausgibt.
Schwierig ist im Nachhinein hierbei nur, die Aufrufe zu zählen und aufzuschreiben. Außer zählen habe ich da noch keine bessere Lösung für gefunden.
Nun die 2. Aufgabe, die mir Schwierigkeiten bereitet:
Was berechnet folgendes Programm? Erstellen Sie eine Variablentabelle, in der Sie die Werte der Variablen für jeden Rekursionsdurchlauf eintrage.
[JAVA=42]public static void main(String args[]) {
int x = f1(10);
}
public static int f1(int i) {
if (i==0) {
return i;
}
int x = i+f1(--i);
return x;
}[/code]
Die Aufgabenstellung ist dieselbe wie oben, nur das ich hier die Aufrufe nicht zählen brauche.
Trotzdem schaffe ich es nicht, sie zu lösen.
Mein Problem sind hier zwei unbekannte Variablen, nämlich x und i (und nicht wie oben nur n).
Ich fange damit an und setze i=0.
Somit bliebe die erste Zeile
Code:
int x = f1(10)
Mit dem nächsten Aufruf würde ich dann 0 ausgeben.
Nun setze ich i=1.
Damit rutsche ich in die nächste Zeile
Code:
int x = i+f1(--i)
Das macht aber keinen Sinn, weil für jedes weitere i die Lösung trotzdem 10 wäre...
Ich vermute, das ich mich hier ziemlich blöd anstelle und wenn man es mir einmal erklärt ich es dann auch lösen kann. Aber solange der Groschen nicht fällt und ich weiß, wie man so ein Programm liest, um es zu lösen, nützt mir das in der Klausur nur wenig.
Aber ich hoffe, das mir hier jemand auf die Sprünge helfen kann und mir zeigt, was ich falsch mache
LG
Biene88
Zuletzt bearbeitet von einem Moderator: