www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

bastardbychoice

Gepostet:
14.07.2011 18:41

Summe über Quadrate?  
Hallo.

Ich möchte ein Programm schreiben, dass bei Eingabe einer Zahl i die Summe über die Quadrate von 1 bis i ausgibt.

Ausgehend von der einfachen Aufsummierung (ohne Quadrate)

sumn::Int->Int
sumn i
| i >= 1 = i + sumn (i-1)
| otherwise = 0

habe ich einfach an

sumn2::Int->Int
sumn2 i
| i >= 1 = (i*i) + (sumn2 ((i-1)*(i-1)))
| otherwise = 0

gedacht.

Funktioniert aber nicht...(spuckt ne ziemlich große Zahl aus...Rekursion bleibt hängen?)

Wo liegt der Fehler?
Zum Seitenanfang    
 
Landei

Gepostet:
15.07.2011 20:41

   
Das ist schon fast richtig. Du darfst sumn2 nur mit (i-1) als Argument rekursiv aufrufen, nicht mit dessen Quadrat.

Du kannst übrigens Pattern Matching für Int-Argumente verwenden:

sqrSum 0 = 0
sqrSum n = n^2 + sqrSum (n-1)


Natürlich würde man im richtigen Leben sowas schreiben:


sqrSum i = sum $ map (^2) [1..i]

--oder

sqrSum i = sum [k^2 | k <- [1..i]]


Und als kleine Zugabe noch eine Implementierung ohne jede Multiplikation:


sqrSum n = sum $ scanl1 (+) [1,3..(n+n)]


Übrigens solltest du im Forum [code] Tags verwenden, sonst ist die Formatierung hin.
Zum Seitenanfang