Rekursive JavaScript in nicht-rekursive umwandeln

Hallo allerseits,

ich habe folgende rekursive Funktion gegeben:

function f(n) {
if (n

Diese Funktion soll nun in eine nicht-rekursive Funktion umgeschrieben werden, die dieselben Ergebnisse wie obige Funktion liefert.

Ich habe da eventuell an eine while-/for-Funktion gedacht, komme aber nicht drauf, wie man das richtig schreiben würde.

Für jede Hilfe bin ich sehr dankbar.

Toby

umgewandelt
Hallo Toby,

function f(n) {
 var retval = n;
 
 while (n \>= 2) {
 n -= 2;
 retval += n;
 }
 
 return (retval);
} // f(n)

Gruß Christian

Hi toby das was jetzt kommt ist pseudo code :wink: must du also noch mal ordenlich schreiben. aber so sollte es nicht recursiv gehen:

z=n-2
while (n [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

mmh?
Hallo,

also die gegebene Funktion liefert ja bspw. bei 9, den Rückgabewert 25 (9 + 7 + 5 + 3 + 1).

z=n-2
while (n

Hallo,

also die gegebene Funktion liefert ja bspw. bei 9, den
Rückgabewert 25 (9 + 7 + 5 + 3 + 1).

z=n-2
while (n while (z >= 2) {

sein.

Grüße,
Moritz

Hallo,

für eine Übungsaufgabe alla „wandle Rekursion in nicht-Rekursion-mit-Schleife um“ ganz nett, allerdings ist das ganz doch recht langsam, egal ob rekursiv oder Schleife. Soweit ich das sehe handelt es sich hier um die Summe der geraden ganzen natürlichen Zahlen, wenn n gerade ist, und um die Summe der ungeraden ganzen natürlichen Zahlen, wenn n ungerade ist. Daher ist mein Vorschlag für eine lineare Lösung:function f(n)
{
var nn = Math.round( parseInt( n ) / 2 ); // Obergrenze für Summenformel(n) bestimmen
var ret = 0;

if ( nn > 0 )
{
if ( 0 == parseInt( n ) % 2 ) // gerade ganze Zahl
{
ret = nn * ( nn + 1 );
}
else // ungerade ganze Zahl
{
ret = nn * nn;
}
}
else if ( nn ret = 0!!

return ret;
}Gruß
Volkmar

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

:wink: dann stimmt das Ergebnis bei ungeradem n aber auch nicht.

Gruß
Christian

Hallo Christian,

herzlichen Dank für deine Hilfe! Das ist genau die schnelle und einfache Lösung, über die ich mir so lange den Kopf zerbrochen habe.

Gruß, Toby

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Volkmar,

danke für deine Hilfe. Mir ist das gar nicht bewusst gewesen, dass die Funktion ja einfach die Summe der natürlichen geraden bzw. ungeraden Zahlen bis n addiert. Genau dies sollte man nämlich in einer anderen Teilaufgabe formulieren (Beschreiben Sie (in Worten), welche Werte die Funktion berechnet…) und ich habe es bisher unnötig kompliziert umschrieben.

Dankeschön nochmal und Gruß,

Toby

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]