{- Sammlung rekursiver Funktionen -}

-- Funktion bildet Summe von n+(n-1)+(n-2)+...+0
-- mit n ist ganzzahlig

sumInt::Int->Int
sumInt n
    | n==0      = 0
    | n>0       = n + sumInt (n-1)
    | otherwise = error "sumInt ..."
    
-- Funktion bildet Fakultaet von (ganzzahligem) n mit
-- n*(n-1)*(n-2)*...*1 !!!:)

fac::Int->Int
fac n 
    | n==0      = 1
    | n>0       = n * fac (n-1)
    | otherwise = error "fac ..."

-- Addition der Fakultaeten

sumFac:: Int->Int
sumFac n 
    | n==0      = 1
    | n>0       = fac n + sumFac (n-1)
    | otherwise = error "bla ..."
    
-- "wichtig", wir koennen Funktionen auch als
-- Parameter uebergeben und anwenden ...
-- dieses einfache Beispiel kann z.B. durch
-- sumFun fac 5 ...

sumFun::(Int->Int)->Int->Int
sumFun f n 
    | n==0      = f 0
    | n>0       = sumFun f (n-1) + f n
    | otherwise = error "Fehler :("
    
    
    
    
    
    
    
    
    
    
    
    
-- Bestimmung des ggT zweier natuerlicher Zahlen

euclid::Int->Int->Int
euclid x y
    | y==0         = x
    | (mod x y)==0 = y
    | otherwise    = euclid y (mod x y)

ggT::Int->Int->Int
ggT x y
    | (x>=y)&&(y>=0) = euclid x y
    | (y>=x)&&(x>=0) = euclid y x
    | otherwise      = error "Fehler :("
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    