-- Lösung: Fibonacci-Funktion mit Tail-Rekursion

fibonacciTail :: Integer -> Integer -> Integer -> Integer
fibonacciTail 0 a _ = a
fibonacciTail n a b = fibonacciTail (n - 1) b (a + b)

fibonacci :: Integer -> Integer
fibonacci n = fibonacciTail n 0 1

-- Testfälle
test1 = fibonacci 0 == 0
test2 = fibonacci 1 == 1
test3 = fibonacci 2 == 1
test4 = fibonacci 3 == 2
test5 = fibonacci 5 == 5
test6 = fibonacci 10 == 55
test7 = fibonacci 15 == 610
test8 = fibonacci 20 == 6765

-- Hauptfunktion zum Testen
main :: IO ()
main = do
    putStrLn "Teste Fibonacci-Funktion mit Tail-Rekursion..."
    print test1
    print test2
    print test3
    print test4
    print test5
    print test6
    print test7
    print test8
