Dann sollte man wohl zugunsten der Portabilität aber weder Deine noch meine Variante wählen, sondern einfach kurz vorher eine neue Variable schreiben (wobei das bei größeren Inhalten zulasten der Performance geht, natürlich).
Eben nochmal getestet: Mit Microsoft VC++ 6 kommt bei
beiden Varianten das falsche Ergebnis 10 heraus (hm...).
Anscheinend gibt es hinsichtlich der Interpretation
der Auswerte-Reihenfolge von Funktionsparametern
noch weiteren Spielraum.
Warum muss es überhaupt eine rekursive Funktion sein? Wenn
Du ein Array von 100000 Elementen summierst, werden
100000 mal je drei Funktionsparameter, sowie die Rücksprungadresse
auf dem Stack abgelegt, der einem bei dieser Gelegenheit
leicht mal um die Ohren fliegen kann.
Ein einfacher Dreizeiler mit einer Schleife
(wie in meinem anderen Post bereits gezeigt)
sollte es in jedem Fall tun.
Falls es partout keine Schleife sondern
eine rekursive Funktion sein muss (Aufgabenstellung?!),
würde ich die Anzahl der Parameter möglichst gering halten,
etwa so:
long double summe3(long double *f, int n) {
if(n>1) return f[n-1]+summe3(f, n-1);
else return *f;
}
Diese Funktion sollte mit allen C++ - Compilern
anstandslos funktionieren.
MfG
Andreas