Wie stellt man die Gaußsche Summenformel rekursiv in c++ dar?
Hallo, eine Funktion soll die Summe zwischen 1 und einer vom Nutzer eingegebenen Zahl a rekursiv berechnen... also soll die Funktion ja mehrmals aufgerufen werden. Ich habe versucht die Gaußsche Summenformel so einzubringen.. wo ist mein Fehler?
int rekursion(int a) {
return (a*(rekursion(a+1))/2)
4 Antworten
Die Summenformel von Gauß ist ein geschlossener Ausdruck für die Summe der ersten n natürlichen Zahlen. Du brauchst, um so einen Ausdruck in einem Programm zu benutzen, keine Rekursion. Allerdings kannst du sehr wohl die Summe eplizit iterativ oder rekursiv-iterativ berechnen:
unsigned int summe_iterativ(unsigned int n)
{
unsigned int sum = 0;
for(int i = n; i > 0; i--)
sum += i;
return sum;
}
unsigned int summe_rekursiv(unsigned int n)
{
return n > 1 ? n + summe_rekursiv(n-1) : 1;
}
Gruß
Der erste Einwand ist wohl berechtigt (man kann jedoch arugmentieren, dass 0 keine natürliche Zahl ist). Das zweite ist kein sauberer Stil, das wirst du in den wenigsten Projekten finden (man studiere hierzu einige C++ Projekte auf github). Bei Punkt drei kannst du mich erst überzeugen, wenn ich das entsprechende ISO/ANSI C++ Paper sehe, wobei ich denke, dass dies a priori nicht gilt.
Gruß
Das was du gemacht hast ist ja eben nicht die Rekursionsformel sondern die geschlossene Form. In Rekursion sieht das ganze so aus:
int rekursion(int a) { if(a == 1) { return 1; } return (a + rekursion(--a)); }
LG
Und was, wenn ein Wert kleiner 1 übergeben wird? Du erlaubst sogar negative Zahlen und das ganze kann in einer Endlosrekursion enden.
die formel hat mit rekursion nichts zu tun.
return (a*(a+1)/2);
genügt vollauf.
Hallo!
... und bei einer Rekursion brauchst du eine Abbruchbedingung
Gruß
summe_rekursiv kann auch 0 erhalten, dann sollte nicht 1 sondern n (0/1) zurückgegeben werden.
i > 0 kann auf i verkürzt werden, denn der Wert 0 gilt bereits als unwahre Aussage und weniger kann es nicht werden.
unsigned alleinstehend gilt nach Standard bereits als int, man kann sich also etwas Schreibarbeit sparen ;)