ich versuche gerade folgenden Ausdruck als Rekursion nach zu programmieren:
\sum_{k=1}^{n} (2k-1)^2
So wie ich das verstehe, läuft das so ab
n=3
((2*1-1)^2)+((2*2-1)^2)+((2*3-1)^2)
Was ist aber mit 0? Die ist doch theoretisch erlaubt oder? Aber was kommt dann raus? 0? Weil n ist ja, „wie oft mache ich den Ausdruck“ und wenn ich dann n=0 müsste ich ihn ja theoretisch 0 mal machen… oder bin ich auf der falschen Schiene?
–––––––––––––––––––– MOD: Summenformel der Einfachheit halber direkt hier reingelatext.
zwar glaube ich, du bist bei der Interpretation der Summe als „soundso oft machen“ ein wenig auf der falschen Schiene, allerdings ist deine Überlegung für n=0 korrekt.
Für n=0 wird diese Summe zu 0, da es ÜBERHAUPT KEINE Terme gibt, die hier aufsummiert werden. Der Funktionswert wird somit zum neutralen Element bezüglich der Addition, und das ist die 0. Damit lässt sich der Funktionswert für alle (auch nicht-natürlichen) Zahlen n ganz simpel rekursiv aufstellen.
zwar glaube ich, du bist bei der Interpretation der Summe als
„soundso oft machen“ ein wenig auf der falschen Schiene,
allerdings ist deine Überlegung für n=0 korrekt.
Hallo,danke für deine Antwort. Wie deutet man dann das n? Das n gibt doch an wie oft dieser Ausdruck addiert wird, wo k immer um 1 erhöht wird?
du kannst n zwar als „so oft machen“ interpretieren, allerdings ist dies eher umgangssprachlich und auch sehr ungenau.
Die Summe gibt lediglich einen Initialwert für den Zähler an und sagt: „solange der Zähler kleiner oder gleich dem Wert oben ist, wird der Term addiert“.
Bei natürlichen Zahlen stimmt diese Interpretation noch, bei den gebrochenrationalen Zahlen wird es schon schwieriger: Was bitte ist 2,5 mal machen? Die Summe wäre für n=2,5 weiterhin definiert.
Noch schlimmer: was passiert bei negativen Zahlen? Würde nach deiner Interpretation bei n=-1 einfach -(der Term für k=-1) herauskommen?
Nee, diese Summe ist auch für negative Zahlen definiert, aber ganz anders: Da der Zähler schon vor dem 1. Summanden größer als n ist, würde hier nichts dazu addiert werden - es kommt 0 heraus.
Programmieren kannst Du das auf zwei Arten, nämlich iterativ…
FUNCTION Summe (n: INTEGER): INTEGER;
VAR k: INTEGER;
begin
Result := 0;
FOR k := 1 TO n DO
begin
Result := Result + (2\*k-1)\*(2\*k-1)
end
end;
…oder rekursiv:
FUNCTION Summe (n: INTEGER): INTEGER;
begin
IF (n
Für n = 0 (oder auch k = 1...n zu einer _leeren Summe_ und hat dann definitionsgemäß den Wert Null. Auch die beiden obigen Routinen geben in diesem Fall als Ergebnis korrekt Null zurück. In der iterativen Variante beruht das auf dem Automatismus, dass eine FOR-Schleife übersprungen wird, wenn der End-Index (hier n) einen kleineren Wert hat als der Start-Index (hier 1). Für dieses sinnvolle Verhalten haben die Entwickler des Compilers gesorgt.
> Wo liegt denn der Fehler bei mir?
Von was für einem Fehler sprichst Du?
Gruß
Martin
PS: Deine Summe hat für n \>=1 übrigens den Wert
\frac{n\:frowning:2n-1)\:frowning:2n+1)}{3}
mag sein, dass es beim Gebrauch des Summenzeichens auch erlaubt und definiert ist, gebrochene Zahlen zu verwenden, allerdings habe ich das bisher noch nirgends gesehen. Eigentlich sind die Grenzen immer ganze Zahlen und die Schrittweite ist 1.
Beim Programmieren ist es natürlich was anderes, in Schleifen kann man auch gebrochene Zahlen verwenden.
ja, bei 1 beginnen und hochzählen bis zum Abbruchkriterium oder andersrum, du fängst bei n an, zählst runter bis zum entsprechenden Abbruchkriterium. In diesem Fall ist beides möglich.
Was ist aber mit 0? Die ist doch theoretisch erlaubt oder?
Aber was kommt dann raus? 0? Weil n ist ja, „wie oft mache ich
den Ausdruck“ und wenn ich dann n=0 müsste ich ihn ja
theoretisch 0 mal machen… oder bin ich auf der falschen
Schiene?
Der Ausdruck den du umsetzen sollst beginnt bei k=1 demnach MUSS n>=k sein. n=0 ist ausgeschlossen.