Hi sagen wir mal ich habe einen COde der so aussieht:
Nun hat mein Prof gemeint, dass die rekursion nicht linear ist und zu vielen gleichen Aufrufen mit gleichen Parameterkombis führt. EIne Möglichkeit damit das besser läuft ist es berechenete Binomialkoeffizienten in einem zwei dimensionalen Array zu speichern und vor einem rekursiven Aufruf zu prüfen, ob die Lösung bereits 1x exisitert hat. Wenn ja soll ich den Wert vom Array ausgeben, wenn nicht soll ich den Wert im Array speichern. Einen Array haben wir schon gegeben, mit der perfekten Länge. Dann habe ich mir überlegt, dass man das so umschreiben kann:
Das ist jetzt keine Hausaufgabe oder so, sondern freiwillig, bei mir ist es so, wenn ich korrekten Code sehe, kann ich nachvollziehen warum etwas wie war und es nächstes Mal richtig. Und ich habe das als Übung versucht noch umzusetzen aber seit paar Stunden keine Ahnung wo der Fehler ist. Wäre cool, wenn das einer vielleicht verbessern kann, damit ich die korrekte logischen Schlüsse zusammenfassen kann und mir merken kann, warum man es so macht und es verstehe.
Sorry das die Tabs beim zweiten bisschen falsch sind, habe das eigentlich versucht korrekt zu machen, aber bin da total dumm online, bei meinem muss ich nur Tab drücken und alles ist richtig eingerückt, das manuell zu machen ist doch komplexer als gedacht.
Java:
public static int calculateBinomialCoefficient (int n, int k)
{
if (k == 1)
return n;
else if (n >= k && k == 0)
return 1;
else
return (n * calculateBinomialCoefficient(n - 1, k - 1) / k);
}
}
Nun hat mein Prof gemeint, dass die rekursion nicht linear ist und zu vielen gleichen Aufrufen mit gleichen Parameterkombis führt. EIne Möglichkeit damit das besser läuft ist es berechenete Binomialkoeffizienten in einem zwei dimensionalen Array zu speichern und vor einem rekursiven Aufruf zu prüfen, ob die Lösung bereits 1x exisitert hat. Wenn ja soll ich den Wert vom Array ausgeben, wenn nicht soll ich den Wert im Array speichern. Einen Array haben wir schon gegeben, mit der perfekten Länge. Dann habe ich mir überlegt, dass man das so umschreiben kann:
Java:
public static int calculateBinomialCoefficient (int n, int k)
{
if (k == 1)
return n;
else if (n >= k && k == 0)
return 1;
else{
for (int a=0; a<array.length;a++)
{
for(int b=0; b<array.length;b++)
{
if (array[a][b]==(n * calculateBinomialCoefficient(n - 1, k - 1) / k))
{
return array[a][b];
}else if(array[a][b]==0)
{
array[a][b]=(n * calculateBinomialCoefficient(n - 1, k - 1) / k);
return (n * calculateBinomialCoefficient(n - 1, k - 1) / k);
}
}
}
}
Das ist jetzt keine Hausaufgabe oder so, sondern freiwillig, bei mir ist es so, wenn ich korrekten Code sehe, kann ich nachvollziehen warum etwas wie war und es nächstes Mal richtig. Und ich habe das als Übung versucht noch umzusetzen aber seit paar Stunden keine Ahnung wo der Fehler ist. Wäre cool, wenn das einer vielleicht verbessern kann, damit ich die korrekte logischen Schlüsse zusammenfassen kann und mir merken kann, warum man es so macht und es verstehe.
Sorry das die Tabs beim zweiten bisschen falsch sind, habe das eigentlich versucht korrekt zu machen, aber bin da total dumm online, bei meinem muss ich nur Tab drücken und alles ist richtig eingerückt, das manuell zu machen ist doch komplexer als gedacht.