Tom: Wie komisch ist das denn?

Beitrag lesen

Hello,

long double summe(long double s, long double *f, int n)
{
        if(n>1)
        {
                summe(s+*f++, f, n-1);
        }
        else
        {
                cout << "Berechneter Wert ist " << s << "\n" << s << ", jetzt erfolgt die funktionsübergabe: \n";
//                 return s;
        }
          return s;
}

Also meiner Meinung nach gehört das "return s" nach unten

Nö. So bringt das gar nichts. Wenn n > 1 ist, würde zwar summe aufgerufen, der zurückgegebene Wert aber nach wie vor ignoriert, und es würde der Parameter s so zurückgegeben, wie er an die Funktion übergeben wurde.

Es muß im Falle von n > 1 das Ergebnis des rekursiven Aufrufs zurückgegeben werden.

Und wo steht das Ergebnis?
MMn in s!
Also würde ein "return s" eine lokale Kopie des Referenzparemeters s erzeugen und den dann ins Stackframe zurückschreiben. Schreibt man nichts in Stackframe zurück, bleibt dder entsprechende Platz mit Zufallswert gefüllt.

Dass das Programm ungeschickt gesschrieben ist, muss man nicht extra erwähnen.

Die Rückgabe findet beim Rückweg sooft statt, wie Rekursionsstufen durchlaufen wurden. Entsprechend viele Stackframes wurden auch angelegt und müssen beim Rücklauf wieder ausfgelöst werden.
Es wird mit "return s" jedes Mal derselbe Referenzparemter abgefragt und in 10 verschiedene Stackframes zurückgeschrieben.

Liebe Grüße aus Syburg bei Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de