Hi,
zuerstmal solltest du einen geeigneten Titel angeben.
#include <iostream>
using namespace std;
long double summe(long double s, long double *f, int n)
{
if(n>1)
Du addierst einmal zu wenig. Es muss n>0 heißen.
{
summe(s+*f++, f, n-1);
Weißt du was du hier machst? Du solltest hier mindestens klammern verwenden, damit das etwas nachvollziehbar wird. Gerade als Anfänger solltest du solche Konstrukte vermeiden.
Ich wüsste jetzt nicht auswendig was *f++ macht. Ob es erst dereferenziert (*) oder erst incrementiert (++).
Aber das ist nicht der Fehler.
}
else
{
cout << "Berechneter Wert ist " << s << "\n" << s << ", jetzt erfolgt die funktionsübergabe: \n";
return s;
}
}
Der eigentliche Fehler ist, dass du eine long double Funktion hast, die nur ein long double zurück gibt, wenn die if-bedingung nicht erfüllt ist, anderenfalls gibt sie anscheinend 0 zurück.
Wenn du den Schalter -Wall beim g++ verwendest bekommst du eine Warnung:
"Warnung: Kontrollfluss erreicht Ende einer Nicht-void-Funktion"
long double summe(long double *f, int n)
{
return summe(0, f, n);
}
int main(void)
{
long double x[10];
for(int i=0;i<10;i++)
{
cout << "Bitte Wert " << i+1 << " eingeben \n";
cin >> x[i];
}
cout << "Summe aller Zahlen ist " << summe(x,10) << "\n";
Wegen der Wartungsfreundlichkeit könntest du statt 10 eine Konstante verwenden.
}
Kann sich jemand erklären, warum ich im cout-Aufruf der summe-Funktion noch das richtige Ergebnis bekomme, sobald ich aber dieselbe Variable an main übergebe, immer totaler Mist rauskommt?
Das richtige Ergebnis war es nicht. Die letzte Zahl wird nicht dazugezählt, weil die if-Bedingung falsch ist.
Außerdem solltest du dir nochmal klarmachen, wie eine Rekursion genau funktioniert. Die Ausgabe, die korrekt war erfolgte beim letzten (10.) Aufruf der Funktion Summe. Dieser wurde dann an die als vorletztes aufgerufene Funktion (9.) weitergegeben, dort aber nichtmehr verarbeitet.
mfG,
steckl